Seite 2 von 2

Verfasst: 22.12.2007 13:33
von Daniel P.
Kurzer hat geschrieben:Und man kann das letzte Feld sogar vor dem ResizeGad aufhören lassen.
Kann meine aber auch ;)

Und man muss der Funktion nur die Nummer des zu ändernden Feldes sowie dessen neue Breite übergeben. Der Rest läuft automatisch. Außerdem muss man zur Laufzeit die Anzahl der Felder (die Länge des zu übergebenden Arrays) nicht unbedingt wissen, was ganz praktisch sein kann, wenn man Felder dynamisch hinzufügt und wieder entfernt :mrgreen:
Kurzer hat geschrieben:Ich weiß nicht warum das nicht immer paßt, aber evtl. wird es unter Not(Win98) auch korrekt dargestellt - kann ja mal jemand testen.
Getestet habe ich deinen Code zwar nicht, aber ich denke, dass es wohl an einem der Gründe, die unter "Remarks" beschrieben sind, liegt. Ganz stark springt mir das Wörtchen "kern" ins Auge:
MSDN hat geschrieben:Because some devices kern characters, the sum of the extents of the characters in a string may not be equal to the extent of the string.
Das könnte ein Hinweis sein. Eventuell musst du noch eine Font-Datei laden, um die richtigen Kerning-Tabellen zu erhalten. Hierzu müsste man ermitteln, welche Schriftart und -größe in der StatusBar verwendet wird. Aber vielleicht funktioniert's dann mit diesen Angaben richtig...

Verfasst: 25.12.2007 14:36
von Daniel P.
Kurzer hat geschrieben:Ich habe jetzt was für die dynamische Anpassung gefunden (WinAPI). Leider passt die Größe nicht immer ganz korrekt - da sind hin und wieder mal bis zu 15 Pixel zuviel Platz. Die Funktion GetTextExtentPoint32_ sollte doch eigentlich die korrekte Pixelanzahl zu einem Text zurückgeben?
Da ich gerade das gleiche Problem hatte: Man sollte vor dem Aufruf von GetTextExtentPoint32_() der GDI-Bibliothek den Font-Handle des Gadgets übergeben, dessen Textlängen berechnet werden sollen. Schaut dann so aus:

Code: Alles auswählen

#WM_GETFONT = $31

hFont = SendMessage_(GadgetID, #WM_GETFONT, #Null, #Null)
SelectObject_(GetDC(GadgetID), hFont)
Das ist nur die Quick'n-Dirty-Version. Die Ausführliche Version gibt's bei den CodeGurus als leicht verständliches C++-Beispiel zum nachlesen. Auf alle Fälle erhalte ich damit halbwegs richtige Zahlen (meist +2-3 Pixel mehr) :mrgreen:

HTH

Verfasst: 25.12.2007 18:35
von Kurzer
Supi, danke. :allright: