AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text in TEdit ausrichten

Ein Thema von Ganymed · begonnen am 24. Mär 2009 · letzter Beitrag vom 1. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#1

Text in TEdit ausrichten

  Alt 24. Mär 2009, 08:33
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:
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(
  Edit1.Handle, GWL_STYLE) and not ES_LEFT or ES_RIGHT)
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...

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
  Mit Zitat antworten Zitat
joehd

Registriert seit: 8. Okt 2008
Ort: Heidelberg
109 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Text in TEdit ausrichten

  Alt 24. Mär 2009, 09:32
Also ich weis ja nicht kann es sein vorher markieren ?
Grüße Joachim
joe
immer wenn ich was suche finde ich es hier komisch oder ?
Arbeite mit D3 D5 D2007 DXE Prof
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

Re: Text in TEdit ausrichten

  Alt 24. Mär 2009, 09:41
Und so?
Delphi-Quellcode:
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.
Unter Delphi 5 klappt das so bei mir.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Text in TEdit ausrichten

  Alt 24. Mär 2009, 09:55
Also die Kurtzversion von Ganymed funktioniert (D6).
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#5

Re: Text in TEdit ausrichten

  Alt 24. Mär 2009, 10:00
@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...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Text in TEdit ausrichten

  Alt 24. Mär 2009, 10:03
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#7

Re: Text in TEdit ausrichten

  Alt 24. Mär 2009, 10:40
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...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: Text in TEdit ausrichten

  Alt 24. Mär 2009, 10:56
Dann verwende doch eine Kombination aus diesem Code und meiner Crackerklasse. Damit kannst Du dann die Ausrichtung jedes einzelnen Edits festlegen und eine Komponente muss auch nicht installiert werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ganymed

Registriert seit: 11. Jun 2003
Ort: Hameln
56 Beiträge
 
Delphi 7 Architect
 
#9

Re: Text in TEdit ausrichten

  Alt 30. Mär 2009, 16:08
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...)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

Re: Text in TEdit ausrichten

  Alt 30. Mär 2009, 17:14
Das hier habe ich gerade erfolgreich (ohne MemoryLeaks) unter Delphi 2007 ausgeführt:
Delphi-Quellcode:
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.
Du scheinst den Speicher anderweitig zu verschwenden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz