Ich möchte einen Dateinamen verkürzen, einen TEdit zu passen, so etwas wieWie kann ich ein TEdit-Canvas in Delphi erhalten?
Edit1.Text := MinimizeName(FileName, Edit1.Canvas, Edit1.Width);
Leider ist dieses nicht kompilieren, weil ein TEdit eine direkt Canvas
Eigenschaft verfügt. Die Zeichenfläche wird für ihre Schriftmetriken benötigt. Wie kann ich auf eine Leinwand von TEdit zugreifen?
(MinimizeName
in Vcl.FileCtrl erklärt.)
Sie müssen 'ReleaseDC' auch aufrufen, wenn Sie es nicht mehr verwenden. Sie sollten auch in Betracht ziehen, dies beim Start zu erstellen und es beim Herunterfahren freizugeben. Und noch wichtiger: Sie sollten nur malen, wenn Windows Sie über die Meldung "WM_PAINT" dazu auffordert, oder Windows wird einfach wieder über das, was Sie gemalt haben, malen. –
Siehe die Dokumentation für 'WM_PAINT': https://msdn.microsoft.com/en-us/library/windows/desktop/dd145213(v=vs.85).aspx –
@Jerry Gute Punkt über die ReleaseDC, obwohl Ich stimme nicht überein, das Handle beim Start zu bekommen: Sie sollten Speicher nicht länger als erforderlich zuweisen. Außerdem brauche ich den WM_PAINT nicht; Ich brauche nur die Leinwand für die Font-Metriken, wie ich in meinem OP gesagt habe. Ich gebe den Dateinamen der Texteigenschaft des TEdits zu, und dann kümmert sich die VCL um das Malen. –