abrufen Ich denke, meine Frage ist klar genug, aber ich erkläre mehr. Wenn wir AntiAlias in der RenderText-Prozedur verwenden, ist der in der TextWidth-Funktion erhaltene Wert nicht korrekt. Was kann ich tun, um die richtige Textbreite zu erhalten?wie genaue Textbreite für RenderText in Graphics32
Antwort
Sie können den Algorithmus in seinem eigenen Code suchen. Sie müssen es auch berechnen. Jedenfalls mache ich das so.
function TGR32Canvas.TextWidth(const Text: string): Integer;
var
TempFont: TFont;
TempWidth: Integer;
begin
if Text <> '' then
begin
TempFont := TFont.Create;
try
TempFont.Assign(Font);
TempFont.Size := Font.Size shl AA_MODE;
TempWidth := GetTextWidth(Text, TempFont);
finally
TempFont.Free;
end;
end
else
TempWidth := 0;
TempWidth := (TempWidth shr AA_MODE + 1) shl AA_MODE;
Result := TempWidth shr AA_MODE;
end;
Die GetTextWidth-Funktion ist einfach. Du kannst es anders machen.
function GetTextWidth(const Text: string; const Font: TFont): Integer;
var
Canvas: TCanvas;
begin
Canvas := TCanvas.Create;
try
Canvas.Handle := GetDC(0);
try
Canvas.Font.Assign(Font);
Result := Canvas.TextWidth(Text);
finally
ReleaseDC(0, Canvas.Handle);
end;
finally
Canvas.Free;
end;
end;
von welcher Einheit hast du es bekommen? GetTextWidth-Funktion ist nicht identifiziert. – Javid
Vergessen, es zu zeigen. Ich habe die Antwort bearbeitet. Es kann wahrscheinlich eleganter gemacht werden, aber die Idee ist die gleiche und es funktioniert. – Runner
DANKE SOOOO VIEL MATE! – Javid
Sie können auch die API-Funktion von Windows verwenden GetTextExtentPoint32 einige google Sie zB auf Delphi
GR32 verwendet seine eigenen Techniken zum Zeichnen, also glaube ich nicht, dass die Verwendung der API Ihnen genaue Ergebnisse liefern würde. – Runner
Haben Sie lösen das Problem zu finden? – Runner
ja. es ist perfekt mit dem Code getan, den du gabst. Danke nochmal!! Ich brauchte wirklich diese – Javid