Drucken eines Memofeldes
Moderator: Moderatoren
Drucken eines Memofeldes
Hallo,
ich lese einen String in DCMULTILINE ein, und stelle ihn dort zur Bearbeitung für den Benutzer dar. Dieses Feld ist in der Höhe und Breite durch den Benutzer veränderbar, und je nachdem wird der String entsprechend umgebrochen. Anschließend wird das Feld in einem Memo-Feld einer DBF abgespeichert.
Nun zu meinem Problem:
Wenn ich dieses Memofeld ausdrucken will (mit memoline), stellt er den Inhalt völlig anders dar, als angezeigt.
Was mu0 ich tun, dass das Memofeld so abgepeichert wird, wie es angezeigt wurde?
Gruß
Günter Früholz
ich lese einen String in DCMULTILINE ein, und stelle ihn dort zur Bearbeitung für den Benutzer dar. Dieses Feld ist in der Höhe und Breite durch den Benutzer veränderbar, und je nachdem wird der String entsprechend umgebrochen. Anschließend wird das Feld in einem Memo-Feld einer DBF abgespeichert.
Nun zu meinem Problem:
Wenn ich dieses Memofeld ausdrucken will (mit memoline), stellt er den Inhalt völlig anders dar, als angezeigt.
Was mu0 ich tun, dass das Memofeld so abgepeichert wird, wie es angezeigt wurde?
Gruß
Günter Früholz
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Günter,
ich nutze eXpress++ nicht - aber für das normale Handling wäre bei Memoline der letzte Parameter (lWrap) wichtig!
Bei .t. wird der Text automatisch umbrochen und bei .f. nur an den Stellen, an denen der Nutzer bei der Eingabe Return gedrückt hat...
Viele Grüße,
Martin
ich nutze eXpress++ nicht - aber für das normale Handling wäre bei Memoline der letzte Parameter (lWrap) wichtig!
Bei .t. wird der Text automatisch umbrochen und bei .f. nur an den Stellen, an denen der Nutzer bei der Eingabe Return gedrückt hat...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Hallo Martin,
danke für Deine rasche Antwort. Wenn wrap beim Einlesen des Strings auf .t. steht, wird der String im Memofeld nicht sauber dargestellt, bzw. nur ein Teil der 1. Linie.
Erstellt eigentlich xBase beim Einlesen eines Strings automatisch einen weichen Zeilenumbruch? Wenn dies der Fall wäre, könnte man eventuell mit AT() die Position abfragen und den String ausgeben.
Gruß
Günter Früholz
danke für Deine rasche Antwort. Wenn wrap beim Einlesen des Strings auf .t. steht, wird der String im Memofeld nicht sauber dargestellt, bzw. nur ein Teil der 1. Linie.
Erstellt eigentlich xBase beim Einlesen eines Strings automatisch einen weichen Zeilenumbruch? Wenn dies der Fall wäre, könnte man eventuell mit AT() die Position abfragen und den String ausgeben.
Gruß
Günter Früholz
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Drucken eines Memofeldes
hi,
tauscht du vorher die "Soft-CR" (Chr(141)+Chr(10)) mit HardCR() aus ?
Dabei gibt es KEINEN "Soft-CR", wenn der String nicht schon welche
enthielt.
ABER das nützt dir gar nichts wenn ein User einen "wide Screen" besitzt
und das Memo weiter aufzieht als das Papier breit ist und es nicht auf
das Papier passt ...
gruss by OHR
Jimmy
Wie setzt du MEMOLINE() (mit MLCOUNT() ) ein ?gf210957 hat geschrieben: Wenn ich dieses Memofeld ausdrucken will (mit memoline), stellt er den Inhalt völlig anders dar, als angezeigt.
tauscht du vorher die "Soft-CR" (Chr(141)+Chr(10)) mit HardCR() aus ?
wird es ja (mit "Soft-CR") ... und das ist ja dein Problemgf210957 hat geschrieben: Was mu0 ich tun, dass das Memofeld so abgepeichert wird, wie es angezeigt wurde?
Ich gehe mal davon aus das du mit MEMOREAD() einen String einliest.gf210957 hat geschrieben: Erstellt eigentlich xBase beim Einlesen eines Strings automatisch einen weichen Zeilenumbruch?
Dabei gibt es KEINEN "Soft-CR", wenn der String nicht schon welche
enthielt.
MlPos() könnte dir da helfen die "Anfangsposition" einer Zeile zu finden,gf210957 hat geschrieben: Wenn dies der Fall wäre, könnte man eventuell mit AT() die Position abfragen und den String ausgeben.
ABER das nützt dir gar nichts wenn ein User einen "wide Screen" besitzt
und das Memo weiter aufzieht als das Papier breit ist und es nicht auf
das Papier passt ...
gruss by OHR
Jimmy
Hallo Jimmy
danke für Deine Antwort.
Wenn tatsächlich ein weicher Umbruch beim Einlesen des Strings eingefügt wird, könnte man doch mit AT() die Position abfragen und die Zeile mit memoline und als Länge die Pos. aus AT() ausdrucken. Dann sieht das Ganze doch aus wie in dem Memofeld.
Ich werde das morgen testen.
Gruß
Günter Früholz
danke für Deine Antwort.
Wenn tatsächlich ein weicher Umbruch beim Einlesen des Strings eingefügt wird, könnte man doch mit AT() die Position abfragen und die Zeile mit memoline und als Länge die Pos. aus AT() ausdrucken. Dann sieht das Ganze doch aus wie in dem Memofeld.
Ich werde das morgen testen.
Gruß
Günter Früholz
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Günter,
dafür kannst Du eigentlich auch MemoTran() nutzen.
? MemoTran( <cString>, [<cNewHardCR>], [<cNewSoftCR>] )
Viele Grüße,
Martin
dafür kannst Du eigentlich auch MemoTran() nutzen.
? MemoTran( <cString>, [<cNewHardCR>], [<cNewSoftCR>] )
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
wenn der USER nicht am Ende der Zeile ein RETURN drückt. (wie auch
hier wenn ich die Msg schreibe).
Deshalb "siehst" du auch nur die 1st Zeile im Memo wenn du gerade
eine String (der keine "Soft-CR" hat ?) eingelesen hast.
aber warum ? ersetzte doch VOR dem drucken die "Soft-CR" mit HardCR()
und nutze dann MlPos() statt Memoline() um jedes Zeile zu drucken.
gruss by OHR
Jimmy
wird es nicht ! die "Soft-CR" enstehen "nur" bei der "manuellen" Eingabegf210957 hat geschrieben: Wenn tatsächlich ein weicher Umbruch beim Einlesen des Strings eingefügt wird,
wenn der USER nicht am Ende der Zeile ein RETURN drückt. (wie auch
hier wenn ich die Msg schreibe).
Deshalb "siehst" du auch nur die 1st Zeile im Memo wenn du gerade
eine String (der keine "Soft-CR" hat ?) eingelesen hast.
besser wäre wohl da MlCtoPos() - Position eines Zeichens in einer formatierten Zeichenkette ermitteln -gf210957 hat geschrieben: könnte man doch mit AT() die Position abfragen und die Zeile mit memoline und als Länge die Pos. aus AT() ausdrucken. Dann sieht das Ganze doch aus wie in dem Memofeld.
aber warum ? ersetzte doch VOR dem drucken die "Soft-CR" mit HardCR()
und nutze dann MlPos() statt Memoline() um jedes Zeile zu drucken.
gruss by OHR
Jimmy
Hallo,
das Problem ist doch, dass die Länge der Zeile nicht bekannt ist. Deshalb war mein Gedanke, in dem String ein Zeichen zu finden, mit dem ich diese Länge feststellen kann. Wenn es jedoch keine besonderen Zeichen gibt (weicher Zeilenumbruch), muss ich einen anderen Ansatz finden.
Damit scheidet auch der Gedanke aus, den weichen Umbruch gegen einen harten auszutauschen.
Gruß
Günter Früholz
das Problem ist doch, dass die Länge der Zeile nicht bekannt ist. Deshalb war mein Gedanke, in dem String ein Zeichen zu finden, mit dem ich diese Länge feststellen kann. Wenn es jedoch keine besonderen Zeichen gibt (weicher Zeilenumbruch), muss ich einen anderen Ansatz finden.
Damit scheidet auch der Gedanke aus, den weichen Umbruch gegen einen harten auszutauschen.
Gruß
Günter Früholz
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Günter,
das Austauschen geht doch mit dem von mir genannten Kommando:
nehmen würdest, solltest Du nur noch harte Zeilenwechsel haben!
Viele Grüße,
Martin
das Austauschen geht doch mit dem von mir genannten Kommando:
Code: Alles auswählen
? MemoTran( <cString>, [<cNewHardCR>], [<cNewSoftCR>] )
- cString ist Dein Memofeld
- cNewHardCR ist das Zeichen, das den harten Zeilenwechsel (chr(13)+chr(10)) ersetzen soll
- cNewSoftCR ist das Zeichen, das den weichen Zeilenwechsel (chr(141)+chr(10)) ersetzen soll
Code: Alles auswählen
? MemoTran( <cString>, chr(13)+chr(10), chr(13)+chr(10) )
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Günter,
das sollte eigentlich nicht so sein!
Ich nutze die Funktion z.B. selber, um alle Zeilenwechsel zu entfernen (will den Inhalt als Fließtext ausgeben) - und das klappt mitwunderbar...
Poste doch mal bitte Deinen Codeteil...
Was liefert dennin Deinem Fall?
Viele Grüße,
Martin
EDIT: habe egrade noch die Funktion HardCR entdeckt - nimm mal die!
Die ersetzt nämlich alle weichen Zeilenumbrüche durch harte...
das sollte eigentlich nicht so sein!
Ich nutze die Funktion z.B. selber, um alle Zeilenwechsel zu entfernen (will den Inhalt als Fließtext ausgeben) - und das klappt mit
Code: Alles auswählen
bla := MemoTran( MEMVAR->pcws[ nI, 4 ], " ", " " )
Poste doch mal bitte Deinen Codeteil...
Was liefert denn
Code: Alles auswählen
at( chr(141)+chr(10), cString )
Viele Grüße,
Martin
EDIT: habe egrade noch die Funktion HardCR entdeckt - nimm mal die!
Code: Alles auswählen
? HardCR( cString )
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Hallo,
Sowohl AT() als auch HardCR() liefert kein Ergebnis.
Ich stelle mal ein kleines Demo-Programm bereit, welches das Problem verdeutlicht:
Sowohl AT() als auch HardCR() liefert kein Ergebnis.
Ich stelle mal ein kleines Demo-Programm bereit, welches das Problem verdeutlicht:
Code: Alles auswählen
#include "dcdialog.ch"
#include "appevent.ch"
function Appsys()
return NIL
procedure main()
LOCAL GetList[0], oMemo , lOK
local cTxt := "Ich weiss nicht, warum es nicht funktioniert, aber das Ganze muá doch einen Grund haben"
local cFont := pad("8.Arial",40)
local nEtiBreit := 150
local nEtiHoch := 100
@ 1,1 DCGET cFont;
POPUP {|c|DC_PopFont(c)}
@ 2,1 DCSAY "Breite:" GET nEtiBreit PICTURE "999"
@ 3,1 DCSAY "H”he :" GET nEtiHoch PICTURE "999"
@ 2.5,20 DCPUSHBUTTON CAPTION "Etikett einstellen" ;
SIZE 26,1.2;
ACTION {||oMemo:setSize({nEtiBreit,nEtiHoch}), oMemo:setFontCompoundName(cFont),;
DC_GetRefresh(GetList)}
@ 8.5,15.5 DCMULTILINE cTxt;
OBJECT oMemo;
NOHORIZSCROLL;
EVAL {||oMemo:setSize({nEtiBreit,nEtiHoch}),DC_GetRefresh(GetList)};
LINELENGTH 60 ;
FONT cFont;
EXITKEY xbeK_F2 ; //xbeK_CTRL_RET;
GROUP "WW" ;
TOOLTIP "Zum Beenden dr
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Günter.
Hier liegt ein Mißverständnis vor. Wenn Du einen Text in ein MLE tippst, und der Text wird beim Tippen umgebrochen, so handelt es sich bei diesem Umbruch um ein Darstellungsphänomen. Wenn Du die zurückkommende Textvariable analysierst, wirst Du feststellen, daß nur harte Umbrüche vorzufinden sind, also CR/LF, keineswegs jedoch die Zeilenumbrüche, die sich aus der seitlichen Begrenzung des MLEs ergeben. Deshalb stellt sich der zuvor erfaßte Text auch anders dar, wenn der Benutzer die Breite des MLEs ändert - oder Du den Text ausdruckst. Du müßtest Dir die Breite des MLEs merken, um den Text dann mit MemoLine() entsprechend für den Druck aufbereiten zu können.
Hier liegt ein Mißverständnis vor. Wenn Du einen Text in ein MLE tippst, und der Text wird beim Tippen umgebrochen, so handelt es sich bei diesem Umbruch um ein Darstellungsphänomen. Wenn Du die zurückkommende Textvariable analysierst, wirst Du feststellen, daß nur harte Umbrüche vorzufinden sind, also CR/LF, keineswegs jedoch die Zeilenumbrüche, die sich aus der seitlichen Begrenzung des MLEs ergeben. Deshalb stellt sich der zuvor erfaßte Text auch anders dar, wenn der Benutzer die Breite des MLEs ändert - oder Du den Text ausdruckst. Du müßtest Dir die Breite des MLEs merken, um den Text dann mit MemoLine() entsprechend für den Druck aufbereiten zu können.
Herzlich,
Tom
Tom
-
- UDF-Programmierer
- Beiträge: 94
- Registriert: Do, 22. Dez 2005 16:37
Drucken des Memos
Hi Günter (und Jungs .. ) )
Du musst anders ansetzen:
Das einzige Problem das DU hast ist, dass Du feststellen musst, wieviele
Zeichen bis zu einem Umbruch Du bei einer festen Pixelbreite hast und
das abhängig von verschiedenen Fonts..
Hier ein Pseudocode (auf die Schnelle, sicher nicht lauffähig aber die
Idee kommt durch...)
cString := WasWeissIch Wie Der String aussehen soll
cFont := 10.Arial
nMemosize .= 150
oPS:= PresSpace:New()
GraSetFont(10.Arial)
cTeststring := ""
for i := 1 to len(cString)
cTeststring+= substr(cString,i,1)
aCoords := GraQueryTextBox(oPS, cTestString)
if aCoords[3,1} - aCoords[1,1}> nMemoSize
exit
endif
next
nLaengeBisUmbruch := len(cTestString)
Hoffe das hilft.. sollte so funzen!
Grüße an Alle
Du musst anders ansetzen:
Das einzige Problem das DU hast ist, dass Du feststellen musst, wieviele
Zeichen bis zu einem Umbruch Du bei einer festen Pixelbreite hast und
das abhängig von verschiedenen Fonts..
Hier ein Pseudocode (auf die Schnelle, sicher nicht lauffähig aber die
Idee kommt durch...)
cString := WasWeissIch Wie Der String aussehen soll
cFont := 10.Arial
nMemosize .= 150
oPS:= PresSpace:New()
GraSetFont(10.Arial)
cTeststring := ""
for i := 1 to len(cString)
cTeststring+= substr(cString,i,1)
aCoords := GraQueryTextBox(oPS, cTestString)
if aCoords[3,1} - aCoords[1,1}> nMemoSize
exit
endif
next
nLaengeBisUmbruch := len(cTestString)
Hoffe das hilft.. sollte so funzen!
Grüße an Alle
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
soweit ich mich erinnere gibt es die SoftCR nur beim Memoedit().
XbpMLE() erzeugen keine!
Wenn du einen fixed font einstellst kannst du es mit Testen herausbekommen wann ein Umbruch stattfindet, aber wenn auf dem Ziel-PC eine andere dpi eingestellt ist, stimmt es nicht mehr.
Sinnvoll ist es das komplett zu trennen und damit zu leben, dass die
Umbrüche nicht 1:1 sind, wenn der Anwender kein ENTER drückt.
Bei MemoLine() muss man eine sehr lange Zeilenlänge (250) ohne automatischem Umbruch einstellen, wenn man sicher das gleiche sehen will wie im mle eingegeben wurde.
Ohne HardwareCR kann man memoline eine Zeilenlänge geben, die in etwa passt und automatisch umbrechen lassen, oder man sucht nach den blanks und vergleicht die tatsächliche Druckbreite des Teilstrings mit der die man nicht überschreiten möchte. So mache ich es in meiner Druckerklasse.
soweit ich mich erinnere gibt es die SoftCR nur beim Memoedit().
XbpMLE() erzeugen keine!
Wenn du einen fixed font einstellst kannst du es mit Testen herausbekommen wann ein Umbruch stattfindet, aber wenn auf dem Ziel-PC eine andere dpi eingestellt ist, stimmt es nicht mehr.
Sinnvoll ist es das komplett zu trennen und damit zu leben, dass die
Umbrüche nicht 1:1 sind, wenn der Anwender kein ENTER drückt.
Bei MemoLine() muss man eine sehr lange Zeilenlänge (250) ohne automatischem Umbruch einstellen, wenn man sicher das gleiche sehen will wie im mle eingegeben wurde.
Ohne HardwareCR kann man memoline eine Zeilenlänge geben, die in etwa passt und automatisch umbrechen lassen, oder man sucht nach den blanks und vergleicht die tatsächliche Druckbreite des Teilstrings mit der die man nicht überschreiten möchte. So mache ich es in meiner Druckerklasse.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
unter XbpMLE:wordWrap steht
an Ende der Zeile ein zugeben ?!
gruss by OHR
Jimmy
hehe ... ich hätte gedacht das es sich so wie Memoedit() verhält, aberbrandelh hat geschrieben: soweit ich mich erinnere gibt es die SoftCR nur beim Memoedit().
XbpMLE() erzeugen keine!
unter XbpMLE:wordWrap steht
also :wordWrap auf .F. setzen und den User "zwingen" ein "Return"Win32 - Unter Windows erfolgt ein automatischer Zeilenumbruch erst dann, wenn eine Zeile Text mehr als 1024 Zeichen enthält. Um den automatischen Zeilenumbruch unter Windows auf den sichtbaren Bereich des Editierfensters zu begrenzen, muß der horizontale Scrollbar ausgeschaltet werden (oXbpMLE:horizScroll := .F. ).
an Ende der Zeile ein zugeben ?!
gruss by OHR
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
du liest einen "langen String" in eine MLE ein ?
der String enthält keine Soft-/Hard- CR ?
der User "sized" das MLE und will es dann so ausgedruckt haben wie
er es dann in dem Moment sieht ?
wenn alles ja, dann probiere doch mal das :
gruss by OHR
Jimmy
nun verstehe ich langsam gar nichts mehr.gf210957 hat geschrieben: das funktioniert leider nicht, denn der String wird vom Programm erstellt und automatisch eingelesen.
du liest einen "langen String" in eine MLE ein ?
der String enthält keine Soft-/Hard- CR ?
der User "sized" das MLE und will es dann so ausgedruckt haben wie
er es dann in dem Moment sieht ?
wenn alles ja, dann probiere doch mal das :
Code: Alles auswählen
#include "Appevent.ch"
#include "Fileio.ch"
PROCEDURE Main( cFileName )
LOCAL nEvent, mp1, mp2, oXbp
LOCAL cText, oMLE
LOCAL nHandle
SetColor("N/W")
CLS
IF Empty(cFileName)
? Chr(7)
WAIT "Dateiname muß angegeben werden"
QUIT
ENDIF
nHandle := FCreate( cFileName, FC_NORMAL )
IF nHandle == -1
? "Fehler beim Erzeugen der Datei:", FError()
ELSE
cText := "01234567890"
FOR i = 1 TO 100
FWrite( nHandle, cText )
NEXT
FClose( nHandle )
ENDIF
cText := MemoRead( cFileName )
oMLE := XbpMLE():new()
oMLE:wordWrap :=.T.
oMLE:horizScroll := .F.
oMLE:dataLink := {|x| IIf( x==NIL, cText, cText := x ) }
//
// mit F1 umschalten
//
oMLE:resize := {| aOldSize, aNewSize, oObj | Demo2(aOldSize, aNewSize,oObj) }
oMLE:create( , , {50,50}, {550,300} )
oMLE:setData()
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
IF nEvent == xbeP_Keyboard .AND. mp1 == xbeK_F1
IF oMLE:CurrentSize()[1] = 550
PostAppEvent(xbeP_Resize,,{640,480},oMLE)
ELSE
PostAppEvent(xbeP_Resize,,{550,300},oMLE)
ENDIF
ENDIF
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
oMLE:getData()
IF oMLE:changed
MemoWrit( cFileName, cText )
ENDIF
RETURN
FUNCTION Demo2(aOldSize, aNewSize, oMLE)
IF aNewSize[1] = 640
oMLE:SetPos( { 0, 0} )
ELSE
oMLE:SetPos( {50,50} )
ENDIF
oMLE:setSize( aNewSize )
RETURN NIL
Jimmy
-
- UDF-Programmierer
- Beiträge: 94
- Registriert: Do, 22. Dez 2005 16:37
Memo-Gesize
Hi..
ich glaube keiner versteht den Günter so wirklich:
Es geht drum, dass je nach UNTERSCHIEDLICHEM FONT und je
nach MEMO-GRÖSSE natürlich unterschiedlich viele Zeichen auf das
Papier müssen, bevor ein Umbruch geschehen kann/soll...
Also ist der einzige richtige Ansatz glaube ich meiner..
Ich codier das jetzt mal zu Ende und schick es ihm..
Ciao
ich glaube keiner versteht den Günter so wirklich:
Es geht drum, dass je nach UNTERSCHIEDLICHEM FONT und je
nach MEMO-GRÖSSE natürlich unterschiedlich viele Zeichen auf das
Papier müssen, bevor ein Umbruch geschehen kann/soll...
Also ist der einzige richtige Ansatz glaube ich meiner..
Ich codier das jetzt mal zu Ende und schick es ihm..
Ciao
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Memo-Gesize
hi,
gruss by OHR
Jimmy
poste es doch einfach hier, dann haben alle was davonMichael Rudrich hat geschrieben: Ich codier das jetzt mal zu Ende und schick es ihm..
gruss by OHR
Jimmy
-
- UDF-Programmierer
- Beiträge: 94
- Registriert: Do, 22. Dez 2005 16:37
Memo-Und so..
@Jimmy: Gerne poste ich es hier..
@ Günter: In Deinem Beispiel waren noch ein paar Fehler, insbesondere
solltest Du schon das Memo auch optisch anpassen wenn Du die FONT
änderst... ich habs mal gleich gemacht...
Hier der Code - ich hoffe es hilft Dir und ist das was Du brauchst...
Grüße
Michl
#include "dcdialog.ch"
#include "appevent.ch"
#INCLUDE "GRA.CH"
#INCLUDE "xbp.CH"
function Appsys()
return NIL
procedure main()
LOCAL GetList[0], oMemo , lOK
local cTxt := "Ich weiss nicht, warum es nicht funktioniert, aber das Ganze muá doch einen Grund haben"
local cFont := pad("8.Arial",40)
local nEtiBreit := 150
local nEtiHoch := 100
local nUmrech := 0
@ 1,1 DCGET cFont;
POPUP {|c|DC_PopFont(c)} ;
OBJECT oFont
@ 2,1 DCSAY "Breite:" GET nEtiBreit PICTURE "999"
@ 3,1 DCSAY "H”he :" GET nEtiHoch PICTURE "999"
@ 2.5,20 DCPUSHBUTTON CAPTION "Etikett einstellen" ;
SIZE 26,1.2;
ACTION {|o|oMemo:setSize({nEtiBreit,nEtiHoch}), ;
o:=XbpFont():new():create( alltrim(cFont) ), ;
oMemo:setFont(o), oMemo:Configure(),;
o:Destroy(),;
DC_GetRefresh(GetList)}
@ 8.5,15.5 DCMULTILINE cTxt;
OBJECT oMemo;
NOHORIZSCROLL;
EVAL {||oMemo:setSize({nEtiBreit,nEtiHoch}),DC_GetRefresh(GetList)};
LINELENGTH 60 ;
FONT cFont;
EXITKEY xbeK_F2 ; //xbeK_CTRL_RET;
GROUP "WW" ;
TOOLTIP "Zum Beenden dr
@ Günter: In Deinem Beispiel waren noch ein paar Fehler, insbesondere
solltest Du schon das Memo auch optisch anpassen wenn Du die FONT
änderst... ich habs mal gleich gemacht...
Hier der Code - ich hoffe es hilft Dir und ist das was Du brauchst...
Grüße
Michl
#include "dcdialog.ch"
#include "appevent.ch"
#INCLUDE "GRA.CH"
#INCLUDE "xbp.CH"
function Appsys()
return NIL
procedure main()
LOCAL GetList[0], oMemo , lOK
local cTxt := "Ich weiss nicht, warum es nicht funktioniert, aber das Ganze muá doch einen Grund haben"
local cFont := pad("8.Arial",40)
local nEtiBreit := 150
local nEtiHoch := 100
local nUmrech := 0
@ 1,1 DCGET cFont;
POPUP {|c|DC_PopFont(c)} ;
OBJECT oFont
@ 2,1 DCSAY "Breite:" GET nEtiBreit PICTURE "999"
@ 3,1 DCSAY "H”he :" GET nEtiHoch PICTURE "999"
@ 2.5,20 DCPUSHBUTTON CAPTION "Etikett einstellen" ;
SIZE 26,1.2;
ACTION {|o|oMemo:setSize({nEtiBreit,nEtiHoch}), ;
o:=XbpFont():new():create( alltrim(cFont) ), ;
oMemo:setFont(o), oMemo:Configure(),;
o:Destroy(),;
DC_GetRefresh(GetList)}
@ 8.5,15.5 DCMULTILINE cTxt;
OBJECT oMemo;
NOHORIZSCROLL;
EVAL {||oMemo:setSize({nEtiBreit,nEtiHoch}),DC_GetRefresh(GetList)};
LINELENGTH 60 ;
FONT cFont;
EXITKEY xbeK_F2 ; //xbeK_CTRL_RET;
GROUP "WW" ;
TOOLTIP "Zum Beenden dr
-
- UDF-Programmierer
- Beiträge: 94
- Registriert: Do, 22. Dez 2005 16:37
Memo nochmal
Hi..
das ist natürlich Günter's Express++ Code..
der reine Xbase zum Berechnen ist ab hier:
IF lOK
// Okay - Breite ist:
nMemoSize := nEtiBreit
// Einen Static fü
das ist natürlich Günter's Express++ Code..
der reine Xbase zum Berechnen ist ab hier:
IF lOK
// Okay - Breite ist:
nMemoSize := nEtiBreit
// Einen Static fü