Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi vertikales Zentrieren in abgeleiteter Edit-Kompo (https://www.delphipraxis.net/88772-vertikales-zentrieren-abgeleiteter-edit-kompo.html)

messie 20. Mär 2007 20:38


vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Hallo,

ich würde gerne einem Editfeld (was ich schon anderweitig angepasst habe), auch eine Möglichkeit zum vertikalen Zentrieren geben.
Nach dem, was ich bisher verstanden habe, benutzt Tedit oder ähnliche Kompos die API-Funktion SetWindowText, die die DrawText-Option DT_VCENTER nicht kennt.
Kann man das irgendwie als zusätzlichen Parameter übergeben?

Grüße, Messie

messie 26. Mär 2007 13:10

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Hallo, ich habe leider noch keinen Ansatz gefunden.

Grüße, Messie

SirThornberry 26. Mär 2007 13:15

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Mit SetWindowText setzt man nur den Text selbst, nicht wie dieser angezeigt wird.

messie 26. Mär 2007 13:31

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Zitat:

Zitat von SirThornberry
Mit SetWindowText setzt man nur den Text selbst, nicht wie dieser angezeigt wird.

Wo wird denn die Art der Anzeige festgelegt?

Grüße, Messie

Luckie 26. Mär 2007 13:32

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Im Forum sollte es schon Code geben, wie man Text in einem Edit zentrieren kann.

uwewo 26. Mär 2007 13:44

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Delphi-Quellcode:
private
   FAlignment        : TAlignment;
   procedure SetAlignment(Value: TAlignment);
...
public
   procedure CreateParams(var Params: TCreateParams); Override;
...
published
   property Alignment: TAlignment read FAlignment write SetAlignment default taRightJustify;
...
end;

procedure TDeinEdit.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  if Parent <> nil then
   case FAlignment of
     taLeftJustify : Params.Style := Params.Style or ES_LEFT;
     taRightJustify : Params.Style := Params.Style or ES_RIGHT;
     taCenter      : Params.Style := Params.Style or ES_CENTER;
   end;
end;

procedure TDeinEdit.SetAlignment(Value: TAlignment);
begin
  if FAlignment <> Value then
  begin
    FAlignment := Value;
    ReCreateWnd;
  end;
end;
Eine Möglichkeit :wink:

messie 26. Mär 2007 13:46

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Ich wollte gerne vertikal zentrieren, horizontal läuft schon...

Grüße, Messie

uwewo 26. Mär 2007 14:00

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Uuups,

es gibt glaube ich kein "Edit Control Style" für vertikales zentrieren.

DT_VCENTER ist ein Format Flag von DrawText() von daher kann es nicht funktionieren.

Luckie 26. Mär 2007 14:01

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Du müsstest die Ausgabe selber zeichnen mit DrawText und dort das entsprechende Flag mit angeben.

messie 26. Mär 2007 14:25

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Zitat:

Zitat von Luckie
Du müsstest die Ausgabe selber zeichnen mit DrawText und dort das entsprechende Flag mit angeben.

Ja, hatte ich auch schon überlegt. Ich habe aber nichts gefunden wie Canvas etc. wo ich mit DrawText drankomme.

Grüße, Messie

uwewo 26. Mär 2007 15:21

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Versuchs mal damit, ungetestet!!!

Delphi-Quellcode:
ARect := Edit.BoundsRect;
DrawText(Edit.Handle,PChar('Text'), StrLen(PChar('Text')), ARect, DT_VCENTER or DT_CENTER);

messie 26. Mär 2007 15:40

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Zitat:

Zitat von uwewo
Versuchs mal damit, ungetestet!!!

Delphi-Quellcode:
ARect := Edit.BoundsRect;
DrawText(Edit.Handle,PChar('Text'), StrLen(PChar('Text')), ARect, DT_VCENTER or DT_CENTER);

Funzt leider nich'. In die Richtung hatte ich auch schon ein wenig gebastelt. Man kommt irgendwie nicht an die Zeichenfläche dran.

Grüße, Messie

Luckie 26. Mär 2007 15:48

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Wo hast du denn den Code hingeschrieben? Du müsstest die Paint-Methode von TEdit überschreiben und dort mit DrawText den Text ausgeben / zeichnen.

messie 27. Mär 2007 09:25

Re: vertikales Zentrieren in abgeleiteter Edit-Kompo
 
Zitat:

Zitat von Luckie
Wo hast du denn den Code hingeschrieben? Du müsstest die Paint-Methode von TEdit überschreiben und dort mit DrawText den Text ausgeben / zeichnen.

Ich habe das, was ich versucht habe, nicht mehr wiedergefunden. Mein Edit ist aber aus dem TntEdit abgeleitet, was fürs Schreiben des WideStrings andere Routinen benutzt als TEdit
Delphi-Quellcode:
function Tnt_SetWindowTextW(hWnd: HWND; lpString: PWideChar): BOOL;
begin
  if Win32PlatformIsUnicode then
    Result := SetWindowTextW{TNT-ALLOW SetWindowTextW}(hWnd, lpString)
  else
    Result := SetWindowTextA{TNT-ALLOW SetWindowTextA}(hWnd, PAnsiChar(AnsiString(lpString)));
end;
Da hatte ich versucht, mit DrawText zu arbeiten aber das klappte nicht, deshalb die Frage.

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz