Schriftgröße bei DCBROWSECOL

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Schriftgröße bei DCBROWSECOL

Beitrag von Koverhage »

Hallo,

habe jetzt eine Frage von einem Kunden, dessen Sehvermögen eingeschränkt ist.
Windows ist auf große Schrift eingestellt (125% / 120 dpi).
Beim DCBROWSECOL ist dem Kunden die Schrift zu klein.
Wie kann ich es erreichen, das die Schriftgröße dem der Systemeinstellungen entspricht ?
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Tom »

Hallo, Klaus.

In DCBROWSECOL wird die Schrift benutzt, die via DCGET OPTIONS FONT eingestellt ist (Default ist m.E. 10.Arial). Über DC_GetOptDefault() kannst Du das an einer Stelle programmweit setzen (wenn in der DCBROWSECOL nichts anderes gewählt ist!). Aber. Du musst natürlich auch noch die Presentation Parameter ändern - ein 14 pt Font sieht in einer Tabelle, deren Zellenhöhe auf 10 pt beschränkt ist, nicht sehr gut aus.

Hast Du Dich schon mal mit der SCALEFACTOR-Option auseinandergesetzt? Roger hat da in der letzten veröffentlichten Fassung viel dran getan.
Herzlich,
Tom
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Bertram Hansen »

Hallo Klaus,

ich löse das vielleicht nicht ganz so elegant wie Tom es vorgeschlagen hat, aber es funktionert auch über das PRESENTATION Array beim DCBROWSE in Verbindung mit der aktuellen DPI-Einstellung.

Code: Alles auswählen

aBrowPres := ;
            { { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE },                       /* Header FG Color           */  ;
              { XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY },                    /* Header BG Color           */  ;
              { XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED },            /* Row Sep                   */  ;
              { XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED },            /* Col Sep                   */  ;
              { XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK },                       /* Row FG Color              */  ;
              { XBP_PP_COL_DA_BGCLR, GRA_CLR_BACKGROUND },                  /* Row BG Color              */  ;
              { XBP_PP_COL_DA_ROWHEIGHT, 20},                               /* Row Height                */  ;
              { XBP_PP_COL_HA_HEIGHT, 10 },                                 /* Header Height             */  ;
              { XBP_PP_HILITE_FGCLR, GRA_CLR_BLACK },                       /* Hilite FG color           */  ;
              { XBP_PP_HILITE_BGCLR, GRA_CLR_CYAN },                        /* Hilite BG color           */  ;
              { XBP_PP_COL_FA_FGCLR, GRA_CLR_WHITE },                       /* Footer FG Color           */  ;
              { XBP_PP_COL_FA_BGCLR, GRA_CLR_DARKGRAY },                    /* Footer BG Color           */  ;
              { XBP_PP_COL_FA_HEIGHT, 10 },                                 /* Footer Height             */  ;
              { XBP_PP_COMPOUNDNAME, "10.Courier New" }                     /* Fontname als Zeichenkette */  ;
            }
Du musst halt je nach DPI-Einstellung einige Werte wie XBP_PP_COL_DA_ROWHEIGHT oder XBP_PP_COMPOUNDNAME anpassen.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Koverhage »

Hallo Tom,

hatte das mit dem Scalefaktor mal probiert (ist allerdings schon etwas länger her)
und hatte nicht den richtigen Erfolg damit.
Werde das aber nochmals probieren.
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Koverhage »

Hallo Bertram,

dann werde ich mal sehen, wie man die dpi Einstellung auslesen kann.
Müsste irgendwo sogar im Forum sein, falls ich mich nicht täusche.
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Tom »

Hallo, Klaus.

Das ist eigentlich wirklich simpel.

Ich frage beim Programmstart mit DC_GetWorkArea() ab, welcher Raum für die Applikation zur Verfügung steht, und wenn das mehr als die Standardauflösung (XGA) ist, errechne ich einen Faktor abhängig von der jeweils im Verhältnis kleineren größeren Dimension. Standard ist also 1024 x 768. Wer also z.B. 1280 x 920 hat, hat in Y-Richtung einen um den Faktor 1,25 und in X-Richtung einen um den Faktor 1,21 größeren Arbeitsbereich - 1,21 wird zum Faktor. Und dann setze ich (vorausgesetzt, der Benutzer wünscht diese Skalierung) die Optionen so:

Code: Alles auswählen

DCGET OPTIONS ... SCALEFACTOR {nFactor,nFactor,nFactor,nFactor,.T.,.F.}
DC_GetOptDefault(GetOptions)
(Hier werden auch alle anderen GetOptions gesetzt, die programmweit gelten sollen)

Außerdem werden in der gleichen Funktion alle Presentation Parameter für sämtliche Browses gesetzt. Der Wert, der dort jeweils standardmäßig für XBP_PP_COL_DA_ROWHEIGHT steht, wird ebenfalls um den Faktor erhöht - sonst blieben die Browse-Zeilen kleiner. Alle anderen Skalierungen nimmt dann eXpress++ vor - und es sieht inzwischen wirklich großartig aus.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Tom »

Hier ist der Thread, in dem es um das Auslesen der Schriftgrößeneinstellung ging:

http://www.xbaseforum.de/viewtopic.php?f=23&t=667
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Koverhage »

Hallo Tom,

ab welchen Build läuft das rund ?

Ich probier das aus, geht das auch mit Minuswerten ?
Habe auf einem NetBook hier nur 1024x600 und da sind die unteren Buttons
zum Teil nicht sichtbar.

Bezügllich der Schriftgröße bin ich mir sicher, daqs ich schon mal eine API Funktion
gesehen habe. Hatte vermutet das Günter hier schon mal sowas gepostet hat.
Gruß
Klaus
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Sören »

Hallo Klaus,

suchst Du das?

Code: Alles auswählen

// - Rueckgabe der eingestellten DPI fuer die Windows-System-Fonts
FUNCTION GetWindowsFontsDPI( lWidth )

  LOCAL nHWnd := AppDesktop():GetHWnd(), nHDC
  LOCAL LOGPIXELSX := 88, LOGPIXELSY := 90  // Logical pixels/inch in X and in Y
  LOCAL nLogPixels := 96  // default f. kleine Schrift

  DEFAULT lWidth TO .T.

  if (  nHDC := DllCall( "User32.DLL", DLL_STDCALL, "GetDC", nHWnd )  )   >   0

    nLogPixels := DllCall( "GDI32.DLL", DLL_STDCALL, "GetDeviceCaps", nHDC, iif( lWidth, LOGPIXELSX, LOGPIXELSY ) )

    DllCall( "User32.DLL", DLL_STDCALL, "ReleaseDC", nHWnd, nHDC )

  endif

RETURN nLogPixels
Beste Grüße,
Sören
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Tom »

Hallo, Klaus.
ab welchen Build läuft das rund ?
Ab Build 253 oder 254. Mit negativer Skalierung (SCALEFACTOR kleiner 1) habe ich es allerdings noch nicht ausprobiert. Werde ich gleich mal machen.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Schriftgröße bei DCBROWSECOL

Beitrag von Koverhage »

Hallo Tom,

irgendwas mache ich falsch. Muss ich hier die Standardgrößen verwenden ?
Wenn ich mit dem Scalefactor arbeite, erscheint der untere Teil des Browsefensters
im oberen Teil des Bildschirms, aber keine Buttons und auch der Teil vor dem DCBROWSE
nicht.


Local nMaxRow := oCrt:currentSize()[2]-34, ;
nMaxCol := oCrt:currentSize()[1]-2, ;
GetOptions := {}, ;
aPos := oCrt:currentPos(), ;
lastcol := int(nMaxCol / 7), ;
lastrow := int(nMaxRow / 22), ;
Local centpos := int( (lastcol-120)/2 )


DCGETOPTIONS TABSTOP COLORGETS {{GRA_CLR_BLACK,GRA_CLR_YELLOW}} ;
AUTORESIZE ROWOFFSET ("fi")->zeiloff ;
WINDOWWIDTH nMaxCol WINDOWHEIGHT nMaxRow ;
WINDOWROW aPos[2] WINDOWCOL aPos[1]

@ lastrow, centpos DCTOOLBAR oToolBar SIZE lastcol-2, 1.0 ;
COLOR XBPSYSCLR_INFOBACKGROUND, XBPSYSCLR_INFOBACKGROUND

@ 0.7, 0 DCSAY LGTrans('9990002','Suche nach')+':';
SAYFONT "10.Verdana Bold" SAYSIZE 0

@ 0.5, 20 DCCOMBOBOX cSelected LIST kdt_array SIZE 36,20 ;
TYPE XBPCOMBO_DROPDOWNLIST WHEN {|| !("cdb")->nl };
ITEMSELECTED {|| kd_sub(kdt_array, cSelected),DC_GetRefresh( GetList ), SetAppFocus(oSuch) }

@ 0.7, 58 DCSAY mess0 SAYSIZE 0
@ 0.5, 70 DCGET cSeek pict '!XXXXXXXXXXXXXXXXXXX' GETSIZE 30 ;
GETOBJECT oSuch WHEN {|| !("cdb")->nl };
GETEVAL { | oXbp | oXbp:keyboard := { | a, b, o | _XSeek_kd( a, b, o, oBrowse ) } }

@ 2, 0 DCBROWSE oBrowse ALIAS cAlias SIZE lastcol-2, lastrow-2 ;
FREEZELEFT { 1 } THUMBLOCK 0 ID 'KUNDENWAHL' ;
PRESENTATION aPres ;
ITEMMARKED {|| cTitle := fGetTitleData(), oDlg:SetTitle(cTitle) } ;
ITEMSELECTED { || kd_aen(), DC_GetRefresh( GetList ) }

DCREAD GUI OPTIONS GetOptions MODAL SETAPPWINDOW TITLE {|| cTitle } ;
to lOk EVAL {|o|oDlg := o, DC_SetAppFocus(oSuch)}
Gruß
Klaus
Antworten