FontSize für Anwendung
Moderator: Moderatoren
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
FontSize für Anwendung
hallo zusammen,
ich hab da mal wieder eine Frage, die für die "Profis" unter euch mit Sicherheit eine Banalität ist, für mich aber sich etwas schwierig darstellt.
Bei einer reinen GUI Anwendung möchte ich die Fonts generell über alles ändern (vielleicht sogar über "Parameter", die der Benutzer individuell einstellen kann).
Alle Elemente der Anwendung ( Header, Footer, Captions, Eingabe-Felder etc.) sollen einheintlich in der Größe geändert werden. (für "halbblinde" Benutzer, die mit hochauflösenden Monitoren arbeiten als auch für "Adleraugen".... )
Gibt es da eine Möglichkeit ? Die Bildschirmauflösung über Windows zu ändern ist keine Alternative.
Schönen (Feier)tag noch und viele Grüße
Lutz
ich hab da mal wieder eine Frage, die für die "Profis" unter euch mit Sicherheit eine Banalität ist, für mich aber sich etwas schwierig darstellt.
Bei einer reinen GUI Anwendung möchte ich die Fonts generell über alles ändern (vielleicht sogar über "Parameter", die der Benutzer individuell einstellen kann).
Alle Elemente der Anwendung ( Header, Footer, Captions, Eingabe-Felder etc.) sollen einheintlich in der Größe geändert werden. (für "halbblinde" Benutzer, die mit hochauflösenden Monitoren arbeiten als auch für "Adleraugen".... )
Gibt es da eine Möglichkeit ? Die Bildschirmauflösung über Windows zu ändern ist keine Alternative.
Schönen (Feier)tag noch und viele Grüße
Lutz
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Hallo Lutz,
OT: Bei uns ist kein Feiertag. Wir sind die bösen Protestanten und nicht die guten Katholiken hier
Zum Thema: natürlich geht das. Du kannst ja die Fontgröße in eine Variable legen, die dann entsprechend eingesetzt wird.
Schwieriger wird das mit den Feld- und Dialoggrößen. Denn bei größerer Schrift ist ja auch die Länge der Texte anders, was die ganze Optik über den Haufen werfen kann. Aber auch das kann man machen, indem Du diese Abmessungen ebenfalls variabel machst. Im einfachsten Fall z. B. stellst Du die mit einem festen Wert auf 10 Punkt ein und änderst über einen variablen Multiplikator Breite und Höhe um x Prozent, je nach Schriftgrad.
Aber dennoch kann es noch Probleme geben: Wenn Du den ganzen Bildschirm ausnutzt, dann wird Dir der Inhalt irgendwann nach rechts über den Rand wandern, wenn Du wirklich die XBPart-Größen variabel machst.
Jan
OT: Bei uns ist kein Feiertag. Wir sind die bösen Protestanten und nicht die guten Katholiken hier
Zum Thema: natürlich geht das. Du kannst ja die Fontgröße in eine Variable legen, die dann entsprechend eingesetzt wird.
Schwieriger wird das mit den Feld- und Dialoggrößen. Denn bei größerer Schrift ist ja auch die Länge der Texte anders, was die ganze Optik über den Haufen werfen kann. Aber auch das kann man machen, indem Du diese Abmessungen ebenfalls variabel machst. Im einfachsten Fall z. B. stellst Du die mit einem festen Wert auf 10 Punkt ein und änderst über einen variablen Multiplikator Breite und Höhe um x Prozent, je nach Schriftgrad.
Aber dennoch kann es noch Probleme geben: Wenn Du den ganzen Bildschirm ausnutzt, dann wird Dir der Inhalt irgendwann nach rechts über den Rand wandern, wenn Du wirklich die XBPart-Größen variabel machst.
Jan
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Hallo Jan,
danke für die schnelle Antwort.
auch ich bin einer von diesen "bösen Protestanten". Mich hat's damals nur beruflich in das katholische BW verschlagen. Gerne nutze ich die Vorteile der Katholiken auch für mich.
Die Antwort hört sich gut an, leider ist sie mir zu allgemein... Hast Du mal ein kurzes, prägnantes Beispiel dazu ?
Gruß
Lutz
danke für die schnelle Antwort.
auch ich bin einer von diesen "bösen Protestanten". Mich hat's damals nur beruflich in das katholische BW verschlagen. Gerne nutze ich die Vorteile der Katholiken auch für mich.
Die Antwort hört sich gut an, leider ist sie mir zu allgemein... Hast Du mal ein kurzes, prägnantes Beispiel dazu ?
Gruß
Lutz
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Code: Alles auswählen
PUBLIC gcFontSize := [Einzulesender Wert] // Vom User wählbar/eingebbar
PUBLIC gcFont := gcFontSize + "Arial Unicode MS" // Die Schrift aus variabler Größe und Bezeichnung zusammensetzen
PUBLIC gnFontMultiplicator := VAL(gcFontSize) * 0.1 //Nur als Beispiel
...
oDlg:drawingArea:SetFontCompoundName(MEMVAR->gcFont) // Die Schrift erzeugen
...
// Ein SLE mit angepasstem Startpunkt und angepasster Größe, ausgehend von einer Standardgröße, die bei 10 Punkt passen würde
oSLE := XBPSle():new(, , {nStartOben, nStartLinks}, {25 * MEMVAR->gnFontMultiplicator, 75 * MEMVAR->gnFontMultiplicator})
Jan
- Lutz Rübe
- Rekursionen-Architekt
- Beiträge: 144
- Registriert: Mi, 02. Aug 2006 18:13
- Wohnort: 24536 Neumünster
- Danksagung erhalten: 6 Mal
- Kontaktdaten:
Hallo Jan,
danke für das Beispiel... Aber das ist genau die Variante, die ich nicht suche... Da muß ich ja während der Programmierung für jedes einzelne Objekt (Combobox, SLE, PushButton, etc.) die Schriftart/Variable angeben. Wenn ich dann den Source ändere und neue Objekte hinzufüge, dann muß ich bei diesen neuen Objekten jedes einzelne wieder mit diesen Variablen bestücken.
Gibt es da nicht eine allgemeine Einstellung, die für alle Objekte gleichermaßen (als Standard) gilt ?
Die Frage mal andersrum gestellt: Woher weiß xBase wenn ich eine GUI Anwendung erstelle, welche Fonts und Sizes es nehmen muß ? Kann ich da nicht die Änderungen bereits vornehmen ?
Gruß
Lutz
danke für das Beispiel... Aber das ist genau die Variante, die ich nicht suche... Da muß ich ja während der Programmierung für jedes einzelne Objekt (Combobox, SLE, PushButton, etc.) die Schriftart/Variable angeben. Wenn ich dann den Source ändere und neue Objekte hinzufüge, dann muß ich bei diesen neuen Objekten jedes einzelne wieder mit diesen Variablen bestücken.
Gibt es da nicht eine allgemeine Einstellung, die für alle Objekte gleichermaßen (als Standard) gilt ?
Die Frage mal andersrum gestellt: Woher weiß xBase wenn ich eine GUI Anwendung erstelle, welche Fonts und Sizes es nehmen muß ? Kann ich da nicht die Änderungen bereits vornehmen ?
Gruß
Lutz
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Lutz,
die Schrift ist so für das gesamt Programm gleich. Wenn Du das in dem Dialog machst, den Du dann mit SetAppWindow(oDlg) als Standard-Anwendungsfenster deklarierst. Die Schrift wird dann weitervererbt an alle Dialoge, die dessen Child sind.
Mit den einzelnen Dialogen hast Du natürlich Recht. Fügst Du da ein XBPart ein, dann verschiebt sich alles. Aber Das würde es auch, wenn Du das in der "einfachen" Vorgehensweise machen würdest. Aber gerade deswegen habe ich ja die Variablen in PUBLICs gepackt, damit z. B. der Vergrößerungs-Multiplikator überall sichtbar und sofort einsetzbar ist. Und gerade das ist dann auch wiederum ein Vorteil mit den Variablen für den Startpunkt: Nach jedem Erzeugeneines XBParts rechnest Du das hoch um den gewollten Abstand, und alles dahinter verschiebt sich mit. Du kannst also z. B. ganz einfach eine Zeile einfügen, und alle weiteren Zeilen verschieben sich automatisch mit.
Im Prinzip ist es also so ('tschuldigung, hab ich nicht klar gemacht in dem Codebeispiel), daß alles VOR dem SLE in der Main steht, das SLE aber in deer entsprechenden Prozedur.
Jan
die Schrift ist so für das gesamt Programm gleich. Wenn Du das in dem Dialog machst, den Du dann mit SetAppWindow(oDlg) als Standard-Anwendungsfenster deklarierst. Die Schrift wird dann weitervererbt an alle Dialoge, die dessen Child sind.
Mit den einzelnen Dialogen hast Du natürlich Recht. Fügst Du da ein XBPart ein, dann verschiebt sich alles. Aber Das würde es auch, wenn Du das in der "einfachen" Vorgehensweise machen würdest. Aber gerade deswegen habe ich ja die Variablen in PUBLICs gepackt, damit z. B. der Vergrößerungs-Multiplikator überall sichtbar und sofort einsetzbar ist. Und gerade das ist dann auch wiederum ein Vorteil mit den Variablen für den Startpunkt: Nach jedem Erzeugeneines XBParts rechnest Du das hoch um den gewollten Abstand, und alles dahinter verschiebt sich mit. Du kannst also z. B. ganz einfach eine Zeile einfügen, und alle weiteren Zeilen verschieben sich automatisch mit.
Im Prinzip ist es also so ('tschuldigung, hab ich nicht klar gemacht in dem Codebeispiel), daß alles VOR dem SLE in der Main steht, das SLE aber in deer entsprechenden Prozedur.
Jan
- 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: FontSize für Anwendung
hi,
zuständig. Die kannst du ja am Anfang definieren.
ABER jedes XbPart muss nun "den" Presentation Parameter benutzen !
Wenn du nun die Grösse verändern will ergeben sich wie schon gesagt
die Positions Probleme welches die selben sind wie bei einem :ReSize().
Deshalb solltest du dich mit der :ReSize Methode beschäftigen und hast
nebenbei dein FontSize Problem gelöst.
gruss by OHR
Jimmy
grundsätzlich sind die Presentation Parameter für das "Aussehen"Lutz Rübe hat geschrieben: Bei einer reinen GUI Anwendung möchte ich die Fonts generell über alles ändern (vielleicht sogar über "Parameter", die der Benutzer individuell einstellen kann).
Alle Elemente der Anwendung ( Header, Footer, Captions, Eingabe-Felder etc.) sollen einheintlich in der Größe geändert werden. (für "halbblinde" Benutzer, die mit hochauflösenden Monitoren arbeiten als auch für "Adleraugen".... )
zuständig. Die kannst du ja am Anfang definieren.
ABER jedes XbPart muss nun "den" Presentation Parameter benutzen !
Wenn du nun die Grösse verändern will ergeben sich wie schon gesagt
die Positions Probleme welches die selben sind wie bei einem :ReSize().
Deshalb solltest du dich mit der :ReSize Methode beschäftigen und hast
nebenbei dein FontSize Problem gelöst.
gruss by OHR
Jimmy
Code: Alles auswählen
FUNCTION DLGMINFO(oMainDlg,aoChild,aoDisplay,cFile)
...
oDlg := XbpDialog():new( AppDesktop(), , aPos, aSize, , .F. )
oDlg:create()
DrawingArea:Resize := {|aOld,aNew,oSelf| InfoResize(aOld, aNew ...)}
...
aPP := { { XBP_PP_BGCLR , GRA_CLR_BLACK } ,;
{ XBP_PP_FGCLR , GRA_CLR_WHITE } ,;
{ XBP_PP_COMPOUNDNAME,"8.Arial"} }
oPosi := XbpStatic():new( oStatic,, {52,50},{300+8,12 },aPP )
oPosi:type := XBPSTATIC_TYPE_TEXT
oPosi:caption := cPosi
oPosi:clipSiblings := .T.
oPosi:lbClick := {| aPos, uNIL, self | MOREINFO(aoChild[CH_WMP]) }
oPosi:create()
AADD(aoDisplay,oPosi)
...
STATIC PROCEDURE InfoResize( aOldSize, aNewSize , oDraw, aoChild, oMainDlg)
LOCAL xDiff1 := 1 ,yDiff1 := 1
LOCAL xDiff2 := 1 ,yDiff2 := 1
LOCAL aDlgSize
LOCAL aPos1 , aDrawSize, aListSize
LOCAL aButtonSize
LOCAL oaMain,oaMid, oaParts
LOCAL j,jMax := 1
//
// if "minimized" or "disable"
//
IF aOldSize[1] == 0 .AND. aOldSize[2] == 0 // New line
aOldSize := aNewSize // New line
ELSEIF aNewSize[1] == 0 .OR. aNewSize[2] == 0 // New line
RETURN // New line
// add "same Size", nothing had happend
ELSEIF aNewSize[1] == aOldSize[1] .AND. aNewSize[2] == aOldSize[2]
RETURN
ENDIF // New line
xDiff1 := INT(aNewSize[1]-aOldSize[1]) // new size
yDiff1 := INT(aNewSize[2]-aOldSize[2])
oaMain := oDraw:DrawingArea:ChildList() // change to oDraw
oDraw:LockUpdate(.T.) // New line
...
************************
*
* listbox
*
************************
aListSize := oaMid[2]:CurrentSize() // current Size
// add Diff
oaMid[2]:setSize( { aListSize[1] +xDiff1, aListSize[2] +yDiff1 } )
IF oaMid[2]:numItems() = 0
oaMid[2]:addItem("this is a Test String")
ENDIF
DO CASE
CASE (aListSize[2] +yDiff1) > 0 .AND. (aListSize[2] +yDiff1) <= 100
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"8.Arial" )
CASE (aListSize[2] +yDiff1) > 100 .AND. (aListSize[2] +yDiff1) <= 200
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"10.Arial" )
CASE (aListSize[2] +yDiff1) > 200 .AND. (aListSize[2] +yDiff1) <= 300
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"12.Arial" )
CASE (aListSize[2] +yDiff1) > 300 .AND. (aListSize[2] +yDiff1) <= 400
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"14.Arial" )
CASE (aListSize[2] +yDiff1) > 400 .AND. (aListSize[2] +yDiff1) <= 500
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"16.Arial" )
CASE (aListSize[2] +yDiff1) > 500 .AND. (aListSize[2] +yDiff1) <= 600
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"18.Arial" )
CASE (aListSize[2] +yDiff1) > 600 .AND. (aListSize[2] +yDiff1) <= 700
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"20.Arial" )
CASE (aListSize[2] +yDiff1) > 700 .AND. (aListSize[2] +yDiff1) <= 800
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"22.Arial" )
CASE (aListSize[2] +yDiff1) > 800 .AND. (aListSize[2] +yDiff1) <= 900
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"24.Arial" )
CASE (aListSize[2] +yDiff1) > 900 .AND. (aListSize[2] +yDiff1) <= 1000
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"26.Arial" )
CASE (aListSize[2] +yDiff1) >1000 .AND. (aListSize[2] +yDiff1) <= 2000
oaMid[2]:setPresParam( XBP_PP_COMPOUNDNAME,"28.Arial" )
ENDCASE
oDraw:LockUpdate(.F.) // New line
oDraw:drawingArea:InvalidateRect() // New line
RETURN