Zitat von
blackdrake:
Hallo.
Ich würde nicht auf logFont.lfPitchAndFamily schreiben. Das könnte irgendwelche unerwünschten Effekte haben. Besser mal in eine Variable.
Am besten gibst du logFont.lfPitchAndFamily einmal zu Testzwecken aus und analysierst durch Umrechnung Dez -> 8'Bin, ob die Bytes 4..7 wie in der
MSDN beschrieben wirklich den korrekten Wert haben (Vergleich mit den Konstanten).
Ich habe mit shr und shl noch nie gearbeitet. Bist du dir sicher, dass wenn du "shr 4" schreibst, auch auf die Bytes 4..7 kommt? Müsstest du nicht nach links schieben?
Außer: Wenn du an die Bytes 4..7, also die "zweite" Hälfte möchtest, kannst du doch gleich Lo() verwenden. Wäre einfacher.
Delphi-Quellcode:
if GetObject(Form3.Label7.Font.Handle, SizeOf(LogFont), @LogFont) <> 0 then
begin
case Lo(logFont.lfPitchAndFamily) of
FF_DONTCARE: neufamilie:='fnil';
FF_ROMAN: neufamilie:='froman';
FF_SWISS: neufamilie:='fswiss';
FF_MODERN: neufamilie:='fmodern';
FF_SCRIPT: neufamilie:='fscript';
FF_DECORATIVE: neufamilie:='fdecor';
end;
neucharset:='\fcharset' + IntToStr(logFont.lfCharset) + ' ';
end;
Danke für die Antwort.
LogFont ist doch bereits meine lokale Variable, die von GetObject nur beschrieben wird. Dürfte also nix machen, sie rechnerisch zu verändern.
lfpitchandfamily ist ein
Byte, dessen 4 obere Bits die Familie enthalten. shr4 verschiebt die Bits um 4 nach rechts, was einer Division durch 16 entspricht und mir den oberen Teil des Byte liefern sollte. Lo gibt doch das niederwertige Byte eines Word oder Integer zurück, lfpitchandfamily ist aber nur ein Byte groß, nicht Word oder Integer. (Und dann müsste ich doch wohl Hi verwenden, falls es um das obere Byte ginge...)
Aber der Wert von lfpitchandfamily ist immer 0 (hab ihn mir im Debugger angeschaut, bevor ich damit rechne).
Meine Frage war, wieso GetObject nicht die von mir erwarteten Werte liefert (Familie, Zeichensatz).