fontobject im browse verwenden

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

fontobject im browse verwenden

Beitrag von Ewald »

Ich wünsche allen Lesern erst einmal ein frohes und vor allen Dingen gesundes neues Jahr.

Damit es bei mir mit "froh" beginnt, könnte ich einen kleinen Tip brauchen :-)

Ich feile mal wieder an meinem kyrillischen Problem und habe an dieser Stelle einen Stillstand.
Ich erzeuge im Programm einen neuen font = ofont mit codepage 204. Diesen Font kann ich im weiteren Programmablauf mit say und get wie erwartet verwenden.
Z.B.
@ 0,0 dcsay "Name " get name font ofont. Es erscheinen kyrillische Schriftzeichen.
So weit so gut.
Ich bekomme es aber leider nicht hin, diesen Font innerhalb eines browse so richtig anzuwenden. Ich habe eine DBF mit deutschen Wörtern und mit der kyrillischen Übersetzung. Funktioniert gut.
Wenn ich mit folgendem Programm durch die Datenbank browse, werden mir die kyrillischen Bezeichnungen "fremdland->fremd" nur als Fragezeichen angezeigt. Wenn ich so ein Feld zum Editieren akitviere - Enter oder Doppelklick - stehen da wie zu erwarten die kyrillischen Zeichen. Die kann ich normal editieren. Sobald ich dieses Feld dann wieder verlasse, schaltet die Anzeige wieder um auf Fragezeichen.
Lt. Handbuch müßte ich mit dcbrowsecol einen Font angeben können. Geht auch mit der Syntax "10.Arial". Wenn ich dort "font ofont" verwende, gibt es eine Fehlermeldung.
Was muss da wohl anstatt der ???? stehen ?

Code: Alles auswählen

proc main
ofont:= xbpfont():new()
ofont:familyname:="Arial"
ofont:codepage:=204  // russisch
ofont:create()

@ 0,0 dcbrowse obrowse size 60,15 ;
      edit xbeBRW_ItemSelected ;
      mode DCGUI_BROWSE_EDITACROSSDOWN_APPEND  ;
      font ofont
dcbrowsecol field fremdbez->deutsch header "Deutsch" parent obrowse  
dcbrowsecol field fremdbez->land    header "Land "   parent obrowse  
dcbrowsecol field fremdbez->fremd   header "Fremd"   parent obrowse  font ????

@ 5,0  dcpushbutton caption "Ende" size 10,1 action {||DC_Readguievent(DCGUI_EXIT_OK,Getlist)}
dcread gui fit  
return
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: fontobject im browse verwenden

Beitrag von AUGE_OHR »

hi,,
Ewald hat geschrieben:Ich wünsche allen Lesern erst einmal ein frohes und vor allen Dingen gesundes neues Jahr.
auch dir und allen anderen ein frohes neues Jahr 2009
Ewald hat geschrieben:

Code: Alles auswählen

proc main
ofont:= xbpfont():new()
ofont:familyname:="Arial"
ofont:codepage:=204  // russisch
ofont:create()

dcbrowsecol field fremdbez->fremd   header "Fremd"   parent obrowse  font ????
ich bin nun kein Express++ User, aber an dem Problem hab ich ja mit chinesich "gekämpft"
und ich denke es müsste mit dem oFont funktionieren ?

Der Trick ist ja die Codepage und falls Roger bei "Font" nun einen CompoundFontName (10.Arial)
haben will dann geht es eben nicht ohne Codepage.
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von Ewald »

Hallo Jimmi,
wenn ich dort "font ofont" einsetze, beglückt mich das Programm mit dieser Fehlermeldung.

Code: Alles auswählen

------------------------------------------------------------------------------
ERROR LOG of "E:\gui\russ.exe" Date: 01.01.2009 20:09:42

Xbase++ version     : Xbase++ (R) Version 1.90.331
Operating system    : Windows XP 05.01 Build 02600 Service Pack 3
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: O CLASS: DC_XbpColumn
          -> VALTYPE: O CLASS: DC_XbpBrowse
          -> VALTYPE: O CLASS: XbpIWindow
          -> VALTYPE: U VALUE: NIL
          -> VALTYPE: A VALUE: {0, 0}
          -> VALTYPE: A VALUE: {{123, "Fremd"}, {116, -1}, {15, XbpFont}, {105, XbpFont}, {105, XbpFont}}
          -> VALTYPE: L VALUE: .F.
oError:canDefault   : N
oError:canRetry     : N
oError:canSubstitute: Y
oError:cargo        : NIL
oError:description  : Parameter has a wrong data type
oError:filename     : 
oError:genCode      :          2
oError:operation    : :create
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :       1025
oError:subSystem    : BASE
oError:thread       :          1
oError:tries        :          0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from XBPCOLUMN:CREATE(278)
Called from DC_XBPCOLUMN:INIT(1691)
Called from DC_GETLIST:READGUI(1893)
Called from DC_READGUI(202)
Called from MAIN(53)
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: fontobject im browse verwenden

Beitrag von AUGE_OHR »

hi,
Ewald hat geschrieben: wenn ich dort "font ofont" einsetze, beglückt mich das Programm mit dieser Fehlermeldung.
das hatte ich befürchtet ... ich denke mal ein will einen String und kein Object ?
vermutlich wird aus dem String ein PresentationParameter und der kann keine Objecte.

Falls ich richtig liege und keiner eine Lösung weiss würde ich mal im Source nachsehen und das
Problem im Webboard von Roger ansprechen.

... läuft deine Xbase++ Application mit XP Manifest ?
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von Ewald »

Hallo Jimmy,
was ist XP Manifest ? Ich denke aber, es läuft nicht.
Was mir einen Knoten in den Kopf macht ist die Tatsache, dass beim normalen browsen in den Feldern/Spalten Fragezeichen stehen - also wohl nicht Codepage 204 - und beim editieren in den gleichen Feldern/Spalten die kyrillischen Schriftzeichen sichtbar sind und bei Eingaben auch richtig zurückgespeichert werden. Die Anweisung, welche Codepage angesetzt werden soll, steht in diesem Fall im browse-object mit dem Parameter "font ofont".
Es müßte aber doch aber auch möglich sein, irgendwo im Programm festzulegen - auch mit normalen xbase Befehlen - , dass für alles innerhalb dieser Aplikation nur und ausschließlich die Codepage 204 angesezt werden soll. Oder bin ich da wohl zu blauäugig ?
Gruß
Ewald
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: fontobject im browse verwenden

Beitrag von AUGE_OHR »

hi,
Ewald hat geschrieben: was ist XP Manifest ? Ich denke aber, es läuft nicht.
sobald ich Manifest benutze sind meine chinesichen Zeichen in SLE "weg"
Ewald hat geschrieben: Was mir einen Knoten in den Kopf macht ist die Tatsache, dass beim normalen browsen in den Feldern/Spalten Fragezeichen stehen - also wohl nicht Codepage 204 - und beim editieren in den gleichen Feldern/Spalten die kyrillischen Schriftzeichen sichtbar sind und bei Eingaben auch richtig zurückgespeichert werden. Die Anweisung, welche Codepage angesetzt werden soll, steht in diesem Fall im browse-object mit dem Parameter "font ofont".
Nein, wie ich mir schon dachte wird ein Presentation Parameter als Font erwartet und kein Object

... man kann doch Express++ auch mit "normalen" Code "mischen" ?
also versuche doch mal eine XbpColumne zwischen deine dcbrowsecol zu schieben was dann
passiert ...
Ewald hat geschrieben: Es müßte aber doch aber auch möglich sein, irgendwo im Programm festzulegen - auch mit normalen xbase Befehlen - , dass für alles innerhalb dieser Aplikation nur und ausschließlich die Codepage 204 angesezt werden soll. Oder bin ich da wohl zu blauäugig ?
klar geht das, aber dann habe ich "nur" chinesich und kein deutsch mehr :)

wir wollen ja 2 verschiedene Codepage gleichzeitig und das geht wohl nicht.
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von Ewald »

Hallo Jimmy,
im browse object selbst geht das mit "font ofont". Wie gesagt, im Edit-modus wird die Codepage dann ja auch benutzt. Ich versuche, hier einen screeshot einzufügen.
Wie du siehst, schaltet das System auf kyrillisch um, wenn ein Feld gewählt ist.
Bild
Bild
Gruß
Ewald
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: fontobject im browse verwenden

Beitrag von AUGE_OHR »

hi,
Ewald hat geschrieben: im browse object selbst geht das mit "font ofont". Wie gesagt, im Edit-modus wird die Codepage dann ja auch benutzt. Ich versuche, hier einen screeshot einzufügen.
Wie du siehst, schaltet das System auf kyrillisch um, wenn ein Feld gewählt ist.
Das ist doch ein EditBrowse d.h. da wird auf ein SLE "umgeschaltet" ... aber die Idee ...

wie schon gesagt siehe dir den Source an oder stelle die Frage bei Roger ins Express++ Forum

... als versuch könnte man mal die rechte Maustaste belegen und den Fontdialog aufrufen und
das dann auf die Columne übernehmen. Ich habe doch dazu was im Forum geschrieben ...

wegen XP Manifest : willst du es nicht mal "testen" ?
wenn es bei dir dann nicht geht bitte eine BUG Meldung an Alaska ... dann wären wir 2
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von Ewald »

Hallo Jimmy + alle "Xbase++ pur" Anwender ;-)
ich muss mal kurz und knapp eine Frage loswerden, da ich in "xbase++ pur"aus Bequemlichkeit nicht weiter einsteigen wollte, so lange express++ mir da so unendlich viel Arbeit abnimmt und auch sonst keine Notwendigkeit dazu besteht.
Wenn man das ganze browse (siehe oben) nicht mit express sondern mit "xbase++ pur" machen würde, wäre das Problem mit der Codepage dann gelöst ?
Konkret, würden die Daten dann richtig angezeigt und können die Daten dann auch richtig editiert werden ?
Kann mir das jemand bestätigen ? Wenn da ginge, dürften das in xbase++ doch auch nur ein paar Zeilen Quellcode werden - oder ?

Gruß
Ewald
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von andreas »

Hallo Ewald,

ich denke, dass es mit dem normalen XBPBrowse funktionieren sollte.
Du hast dann natürlich ein Problem, dass du die Werte nicht direkt bearbeiten kannst.
Aber! Wenn ich mich richtig erinnere, gibt es bei der XBase-Installation ein Beispiel mit der Datenverarbeitung im Browse. Damit könntest du dann auch vielleicht das ganze mit Kyrillisch ausprobieren, ohne viel Code zu schreiben.
Gruß,

Andreas
VIP der XUG Osnabrück
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von hschmidt »

Hallo Ewald,

hast Du schon mal versucht, beim font in DCBROWSECOL einen Codeblock anzugeben, der das Fontobject zurückgibt? Laut express++-Doku sollte das funktionieren.

Andere Frage: wenn Du in der deutschen Spalte in den Edit-Mode wechselst, welchen Font hast Du dann?

Schöne Grüße

Hans
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von Ewald »

Hallo Hans,
ich setze den font (oder die font ?) ja im Browseobject ein. Dort funktioniert es ja auch wie im Handbuch beschrieben.

Code: Alles auswählen

ofont:codepage:=204  // russisch
ofont:create()

@ 0,0 dcbrowse obrowse size 60,15 ;
      edit xbeBRW_ItemSelected ;
      mode DCGUI_BROWSE_EDITACROSSDOWN_APPEND  ;
      font ofont
Dann wendet das System den Font natürlich auch in der Spalte Deutsch an wenn ich auf edit umschalte und es kommt ein Kauderwelsch aus deutschen und kyrillischen Zeichen heraus, da die Zeichen <= chr(122) eben deutsch sind und die darüber kyrillisch.
Die zur Anzeige verwendeten Zeichen stammen wohl alle aus dem Standardzeichensatz.

Bild

Also gehört die Fontangabe richtigerweise nicht zum dcbrowse sondern zu dcbrowsecol und soll dort sowohl für den Anzeigmodus als auch für den Editmodus Verwendung finden.
Und genau da komme ich nicht weiter.
Das mit dem Codeblock war ja meine Eingangsfrage.
Zusammen mit dcbrowsecol funktioniert nur die Syntax font "12.Arial", obwohl das Handbuch da ja anderer Meinung ist.

font ofont geht nicht
font {||ofont} geht auch nicht

Es muss eben eine Möglichkeit her, die Codepage nur auf eine Spalte anzuwenden. Und das sowohl für die normale Anzeige als auch für den Eingabemodus.
Ich habe übrigens versucht, das Problem mit Xbase++ pur zu lösen, komme aber auch dort nur zu dem angezeigten Ergebnis :(
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von hschmidt »

Hallo Ewald,

die Fontangabe bei DCBROWSECOL scheint tatsächlich nicht so wie dokumentiert zu funktionieren.
Mach mal folgendes:

Code: Alles auswählen

dcbrowsecol field fremdbez->fremd   header "Fremd"   parent obrowse  EVAL {|o|o:setfont( ofont)}
Bei mir hat das so funktioniert.

Hans
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von Ewald »

Bingooooo
Hallo Hans,
das wars. Das hat genau die Auswirkung auf die Spalte. Allerdings nur beim browsen. Um auch im editmodus die richtige Codepage zu erhalten, muss das "font ofont" zusätzlich mit obrowse benutzt werden. Das bringt zwar noch einige Probleme mit sich (deutsche Begriffe mit ö,ü,ä etc. bekommen plötzlich kyrillische Buchstaben), aber ich bin erst mal einen Schritt weiter.
Danke für die Hilfe
Gruß
Ewald
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: fontobject im browse verwenden

Beitrag von AUGE_OHR »

hi,
hschmidt hat geschrieben:

Code: Alles auswählen

dcbrowsecol field fremdbez->fremd   header "Fremd"   parent obrowse  EVAL {|o|o:setfont( ofont)}
Klasse, nun solltet ihr das auch im Express++ Forum posten damit es auch andere Express++ User
mitbekommen.
gruss by OHR
Jimmy
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von hschmidt »

Hallo Ewald,

freut mich, dass das so geklappt hat.
Um auch im editmodus die richtige Codepage zu erhalten, muss das "font ofont" zusätzlich mit obrowse benutzt werden. Das bringt zwar noch einige Probleme mit sich (deutsche Begriffe mit ö,ü,ä etc. bekommen plötzlich kyrillische Buchstaben), aber ich bin erst mal einen Schritt weiter.
Ich denke, das Problem kannst Du mit der EDITOR - Direktive von DCBROWSECOL lösen. Da müßte ungefähr so aussehen (nicht getestet!):

Code: Alles auswählen

dcbrowsecol field fremdbez->fremd   header "Fremd"   parent obrowse  EVAL {|o|o:setfont( ofont)};
EDITOR  'E_GET_FREMD'   EXITKEY xbeK_ENTER

@ NIL, NIL DCGET fremdbez->fremd         ID 'E_GET_FREMD' ;
GETFONT ofont
Ich habe bei mir alle editierbaren Browsecolumns auf diese EDITOR-Variante umgestellt, weil man so die Verhaltensweise im Edit-Modus viel besser beeinflussen kann ( ich benutze z.B. nicht das DCGET, sondern habe mir eine abgewandelte Funktion FGET geschrieben, mit der ich den Datenbankzugriff und interne Kontrollmechanismen steuere).

Schöne Grüße

Hans
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: fontobject im browse verwenden

Beitrag von Ewald »

Mensch gegen Maschine. - Kann die Maschine auf Dauer nicht gewinnen. :D
Hallo Hans,
genau so gehts.
Es gibt dann noch ein kleines Problem mit der Header-Höhe in der betroffenen Spalte, der zu ungleichen Zeilen innerhalb des Browserfensters führt. Sie werden versetzt dargestellt.
Da mußte noch ein Parameter für die Schrift her -

Code: Alles auswählen

HEADPRES {{XBP_PP_COMPOUNDNAME,'12.Arial'}}
Sind bisher wohl zu wenig Font-Parameter gewesen ;-)
Dann ist alles paletti.
Das führte mich natürlich zu der Frage nach mehreren Sprachen mit unterschiedlichen Codepages in einem Browserfenster.
Bild
Mangels Vokabelkenntnissen habe ich hier in der Spalte griechisch nur die russischen Begriffe mit Codepage griechisch dargestellt. Sind also irgendwie sinnlos. Aber es zeigt, dass das wohl auch funktioniert.
Gruß
Ewald
Antworten