Drucken eines Memofeldes

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Drucken eines Memofeldes

Beitrag von gf210957 »

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
:grommit:
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.
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Drucken eines Memofeldes

Beitrag von AUGE_OHR »

hi,
gf210957 hat geschrieben: Wenn ich dieses Memofeld ausdrucken will (mit memoline), stellt er den Inhalt völlig anders dar, als angezeigt.
Wie setzt du MEMOLINE() (mit MLCOUNT() ) ein ?
tauscht du vorher die "Soft-CR" (Chr(141)+Chr(10)) mit HardCR() aus ?
gf210957 hat geschrieben: Was mu0 ich tun, dass das Memofeld so abgepeichert wird, wie es angezeigt wurde?
wird es ja (mit "Soft-CR") ... und das ist ja dein Problem
gf210957 hat geschrieben: Erstellt eigentlich xBase beim Einlesen eines Strings automatisch einen weichen Zeilenumbruch?
Ich gehe mal davon aus das du mit MEMOREAD() einen String einliest.
Dabei gibt es KEINEN "Soft-CR", wenn der String nicht schon welche
enthielt.
gf210957 hat geschrieben: Wenn dies der Fall wäre, könnte man eventuell mit AT() die Position abfragen und den String ausgeben.
MlPos() könnte dir da helfen die "Anfangsposition" einer Zeile zu finden,
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
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Günter,
dafür kannst Du eigentlich auch MemoTran() nutzen.
? MemoTran( <cString>, [<cNewHardCR>], [<cNewSoftCR>] )

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
gf210957 hat geschrieben: Wenn tatsächlich ein weicher Umbruch beim Einlesen des Strings eingefügt wird,
wird es nicht ! die "Soft-CR" enstehen "nur" bei der "manuellen" Eingabe
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.
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.
besser wäre wohl da MlCtoPos() - Position eines Zeichens in einer formatierten Zeichenkette ermitteln -

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
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Günter,
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
Wenn Du also z.B.

Code: Alles auswählen

? MemoTran( <cString>, chr(13)+chr(10), chr(13)+chr(10) )
nehmen würdest, solltest Du nur noch harte Zeilenwechsel haben!

Viele Grüße,
Martin
:grommit:
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.
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

Hallo Martin,

danke für Deinen Tipp.
Leider erhalte ich nur einen harten Umbruch am Textende. Deshalb hilft die Funktion memotran() leider auch nicht weiter.

Gruß

Günter Früholz
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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 mit

Code: Alles auswählen

bla := MemoTran( MEMVAR->pcws[ nI, 4 ], " ", " " )
wunderbar...
Poste doch mal bitte Deinen Codeteil...
Was liefert denn

Code: Alles auswählen

at( chr(141)+chr(10), cString )
in Deinem Fall?

Viele Grüße,
Martin

EDIT: habe egrade noch die Funktion HardCR entdeckt - nimm mal die!

Code: Alles auswählen

? HardCR( cString )
Die ersetzt nämlich alle weichen Zeilenumbrüche durch harte...
:grommit:
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.
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

Hallo,

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

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.
Herzlich,
Tom
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

Hallo Tom,

danke für Deine Hilfe. Selbst auf die Gefahr hin, dass ich nerve:
Wie kann ich mir die Breite des Mle merken? SetSize() arbeitet mit Pixeln und DCPRINT mit Zeichen.
Auch Memoline() verlangt als Länge Zeichen.

Gruß

Günter Früholz
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Günter.

Standardmäßig sind bei eXpress++ Spalten 7 Pixel breit und Zeilen 20 Pixel hoch, aber gilt m.E. nicht eins zu eins für DCMULTILINES. Zudem hängt es von der gewählten Edit-Schriftart ab. Ich fürchte, es hilft nur zählen und umrechnen.
Herzlich,
Tom
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Drucken des Memos

Beitrag von Michael Rudrich »

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...)
:roll:
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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: soweit ich mich erinnere gibt es die SoftCR nur beim Memoedit().
XbpMLE() erzeugen keine!
hehe ... ich hätte gedacht das es sich so wie Memoedit() verhält, aber
unter XbpMLE:wordWrap steht
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. ).
also :wordWrap auf .F. setzen und den User "zwingen" ein "Return"
an Ende der Zeile ein zugeben ?!

gruss by OHR
Jimmy
gf210957
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 101
Registriert: Mi, 21. Dez 2005 10:18

Beitrag von gf210957 »

Hallo Jimmy,

das funktioniert leider nicht, denn der String wird vom Programm erstellt und automatisch eingelesen.

Gruß

Günter Früholz
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

wenn es so ist, kannst du ihn doch einfach mit memoline() auf die gewünschte Anzahl von Zeichen zerhacken lassen und die festen Zeilenschaltungen einbauen und alles wieder zu eine String zusammen setzen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
gf210957 hat geschrieben: das funktioniert leider nicht, denn der String wird vom Programm erstellt und automatisch eingelesen.
nun verstehe ich langsam gar nichts mehr.

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
gruss by OHR
Jimmy
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Memo-Gesize

Beitrag von Michael Rudrich »

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Memo-Gesize

Beitrag von AUGE_OHR »

hi,
Michael Rudrich hat geschrieben: Ich codier das jetzt mal zu Ende und schick es ihm..
poste es doch einfach hier, dann haben alle was davon :)

gruss by OHR
Jimmy
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Memo-Und so..

Beitrag von Michael Rudrich »

@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
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Memo nochmal

Beitrag von Michael Rudrich »

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ü
Antworten