braunbär hat geschrieben:Momentan überlege ich gerade, wie ich das Delphi TTextformat in einem Grid am besten in Lazarus so umsetze, dass ich es als property in die published section bekomme. Das Lazarus Gegenstück TTextStyle funktioniert da nicht, das ist kein Set, sondern ein record. Wahrscheinlich werde ich das inklusive neuem Aufzähltyp als Set nachbauen müssen und dann über einen Setter die Felder von einem private record vom Typ TTextStyle befüllen. Aber erst schau ich mir noch die Grid-implementierung von Lazarus genauer an, vielleicht komme ich dann noch auf eine bessere Lösung.
Ich wusste gar nicht, dass Delphi sowas inzwischen hat. Ich würde TTextFormat in einer deiner zentralen Units deklarieren, so wie in Delphi (das folgende habe ich aus StackOverflow), und dann Konvertierungsfunktionen von TextFormat zu TextStyle schreiben, etwa so
Code: Alles auswählen
type
TTextFormats = (tfBottom, tfCalcRect, tfCenter, tfEditControl, tfEndEllipsis,
tfPathEllipsis, tfExpandTabs, tfExternalLeading, tfLeft, tfModifyString,
tfNoClip, tfNoPrefix, tfRight, tfRtlReading, tfSingleLine, tfTop,
tfVerticalCenter, tfWordBreak, tfHidePrefix, tfNoFullWidthCharBreak,
tfPrefixOnly, tfTabStop, tfWordEllipsis, tfComposited);
TTextFormat = set of TTextFormats;
procedure TextFormatToTextStyle(AFmt: TTextFormats; var ATextStyle: TTextStyle);
begin
if tfBottom in AFmt then
ATextStyle.Layout := tlBottom;
if tfVerticalCenter in AFmt then
ATextStyle.Layout := tlCenter;
if tfTop in AFmt then
ATextStyle.Layout := tlTop;
if tfLeft in AFmt then
ATextStyle.Alignment := taLeftJustify;
if tfCenter in AFmt then
ATextStyle.Alignment := taCenter;
if tfRight in AFmt then
ATextStyle.Alignment := taRightJustify;
ATextStyle.EndEllipsis := tfEndEllipsis in AFmt; // PathEllipsis, WordEllipsis ??
ATextStyle.SingleLine := tfSingleLine in AFmt;
ATextStyle.WordBreak := tfWordbreak in AFmt;
ATextStyle.Clipping := not (tfNoClip in AFmt);
ATextStyle.RightToLeft := (tfRtlReading in AFmt);
ATextStyle.ExpandTabs := (tfExpandTabs in AFmt);
ATextStyle.ShowPrefix := AFmt * [tfNoPrefix, tfHidePrefix] = []; // ???
end;
Speziell beim Grid würde ich das dann in der Methode PrepareCanvas aufrufen, um den TextStyle des Grid-Canvas entsprechend zu setzen - PrepareCanvas wird direkt vor der Ausgabe der Zellen aufgerufen und erspart dir das komplette Selberzeichnen der Zellen. Generell sind die Lazarus-Grids wesentlich flexibler aufgebaut als bei Delphi. Schau dir den Wiki-Artikel über Grids an (
http://wiki.lazarus.freepascal.org/Grids_Reference_Page).