![]() |
Text in TEdit ausrichten
Moin allezusammen!
Wie der Titel es vermuten lässt, möchte ich den Text in einem TEdit (rechtsbündig) ausrichten. Ich habe schon mal eine Komponente gebaut, die das kann. Nur darf ich in meinem aktuellen Projekt ausschließlich Standard-Komponenten verwenden :( Zum Glück gibt es in der DP auch dafür eine Lösung (oh ja, ich habe die SuFu bemüht ^^). Dieses Code-Fragment soll das Problem lösen:
Delphi-Quellcode:
Was hier gemacht wird, ist mehr als offensichtlich. Nur leider funktioniert das bei mir nicht. Ich habe es auf D5, D7 und D2007 ausprobiert und nirgendwo hat es etwas bewirkt. Weder im OnCreate-Event, noch im Constructor (der Formulars) und schon gar nicht beim z.B. ButtonClick...
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(
Edit1.Handle, GWL_STYLE) and not ES_LEFT or ES_RIGHT) Bei einer Abfrage des GWL_STYLEs des Edits ist zwar ES_RIGHT übernommen worden, aber auf die Anzeige des Textes hat das keine Auswirkung. Hat jemand eine Idee, woran das liegen könnte und/oder was ich sonst noch versuchen könnte? Vielen Dank und Grüße vom Ganymed |
Re: Text in TEdit ausrichten
Also ich weis ja nicht kann es sein vorher markieren ?
Grüße Joachim |
Re: Text in TEdit ausrichten
Und so?
Delphi-Quellcode:
Unter Delphi 5 klappt das so bei mir.
unit bla;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TEdit = class(StdCtrls.TEdit) protected procedure CreateParams(var Params: TCreateParams);override; end; TForm1 = class(TForm) Edit1: TEdit; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TEdit.CreateParams(var Params: TCreateParams); begin inherited; Params.Style := Params.Style and not ES_LEFT or ES_RIGHT; end; end. |
Re: Text in TEdit ausrichten
Also die Kurtzversion von Ganymed funktioniert (D6). :gruebel:
|
Re: Text in TEdit ausrichten
@DaddyH: Hui! Ich weiß nicht, ob ich dir dafür den Nobelpreis für geniale Workarounds verleihen oder mit Weihwasser und Kruzifix den Dirty-Programming-Teufel austreiben soll... :?
Eine Klasse auf ihrem eigenen Namen abzuleiten ist mir irgendwie nicht geheuer... Obwohl die CreateParams()-Geschichte wunderbar funktioniert und ich auf deine Weise keine neue Komponente bräuchte. @turboPASCAL: Dass das SetWindowLong() funktioniert, wird auch von anderen Benutzern hier im Forum bestätigt. Nur eben bei mir nicht und ich hab keinen Plan warum... :gruebel: |
Re: Text in TEdit ausrichten
Naja, für meine Vorgehensweise findet Du in der DP geschätzte 2000 Beispiele ;). Das hat den Vor- (oder auch Nachteil, je nachdem), dass alle Edits auf dem Formular automatisch angepasst werden.
|
Re: Text in TEdit ausrichten
Meine ganz persönliche Meinung dazu ist, dass diese Lösung, auch wenn sie technisch einwandfrei funktioniert, trotzdem nicht sauber sein muss.
In meinem Fall ist sie auch eher unangebracht, weil eben nicht alle Edits auf dem Formular (bzw. in der Unit) rechtsbündig sein sollen. Und es bleibt die Frage, warum die SetWindowLong()-Methode bei mir nicht funktionieren will... |
Re: Text in TEdit ausrichten
Dann verwende doch eine Kombination aus
![]() |
Re: Text in TEdit ausrichten
Tja, wird mir wahrscheinlich nicht anderes übrig bleiben.
Wobei diese Lösung nicht die Frage klärt, warum das SetWindowLong() bei mir nicht funktionieren will... Wenns jetzt "einfach" nur nicht funktionieren wollte, wäre das eine Sache. Aber ich habe es auf drei unterschiedlichen Systemen mit drei verschiedenen Delphi-Versionen (5, 7 und 2007) probiert, und es hat nirgends funktioniert... Edit: Ich habs jetzt mal mit der Crackerklasse versucht, und ganz so sauber scheint das nicht zu funktionieren. Zumindest meckert der FastMM jetzt beim Beenden des Programmes Memoy-Leaks - die hatte ich vorher nicht... Also dieser Methode gegenüber bleibe ich vorerst skeptisch... Edit: Hab die Crackerklasse in eine eigene Unit ausgelagert und diese dann in allen betroffenen Units eingefügt. Scheint jetzt zu laufen. (Problem waren wahrscheinlich die abgeleiteten Klassen...) |
Re: Text in TEdit ausrichten
Das hier habe ich gerade erfolgreich (ohne MemoryLeaks) unter Delphi 2007 ausgeführt:
Delphi-Quellcode:
Du scheinst den Speicher anderweitig zu verschwenden ;)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TEdit = class(StdCtrls.TEdit) private FAlignment: Classes.TAlignment; procedure SetAlignment(const Value: TAlignment); protected procedure CreateParams(var Params: TCreateParams);override; public property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; end; TForm1 = class(TForm) edt1: TEdit; edt2: TEdit; edt3: TEdit; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TEdit } procedure TEdit.CreateParams(var Params: TCreateParams); begin inherited; case FAlignment of taLeftJustify: Params.Style := Params.Style and not (ES_RIGHT or ES_CENTER) or ES_LEFT; taRightJustify: Params.Style := Params.Style and not (ES_LEFT or ES_CENTER) or ES_RIGHT; taCenter: Params.Style := Params.Style and not (ES_RIGHT or ES_LEFT) or ES_CENTER; end; end; procedure TEdit.SetAlignment(const Value: TAlignment); begin if FAlignment <> Value then begin FAlignment := Value; RecreateWnd; end; end; procedure TForm1.FormCreate(Sender: TObject); begin edt1.Alignment := taLeftJustify; edt2.Alignment := taRightJustify; edt3.Alignment := taCenter; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 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-2025 by Thomas Breitkreuz