Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Vertikales Ausrichten eines Textes im LabeledEdit (https://www.delphipraxis.net/161014-vertikales-ausrichten-eines-textes-im-labelededit.html)

Kalakmul 12. Jun 2011 15:21

Delphi-Version: 2010

Vertikales Ausrichten eines Textes im LabeledEdit
 
Hallo!

Bei der Verwendung eines LabeledEdits habe ich folgendes Problem:

Um die Komponente auf einem papierartigen Hintergrund möglichst unsichtbar erscheinen zu lassen (es soll nur quasi den Rahmen für eine Eingabemöglichkeit bilden), habe ich die Eigenschaft "BorderStyle" auf "bsNone" gestellt.

Dabei verschiebt sich leider der Text innerhalb des Edits an den oberen Rand desselben, sodass er nicht mehr auf gleicher Höhe wie die Beschriftung des zugehörigen Labels steht.

Gibt es eine Möglichkeit den Text innerhalb des Edits des LabeledEdits vertikal zu zentrieren?

Für Buttons habe ich im Netz eine Lösung mit Hilfe von getWindowLong/setWindowLong und BS_VCENTER gefunden. Für ein LabeledEdit scheint es so etwas nicht zu geben, oder weiß jemand einen Rat?

Auf die Verwendung irgendeiner Nicht-Standardkomponente möchte ich nach Möglichkeit verzichten ebenso auf das Ausrichten eines Labes an einem gewöhnlichen Edit.

Kalakmul 14. Jun 2011 16:39

AW: Vertikales Ausrichten eines Textes im LabeledEdit
 
Habe jetzt eine relativ einfache Lösung selbst gefunden:

Könnte man beim SubLabel/EditLabel die Eigenschaft Top auf den gleichen Wert wie beim LabeledEdit setzen, so erschienen die Texte auf gleicher Höhe. Da die Komponente ja transparent sein (bzw. erscheinen = Hintergrundfarbe wie der Parent) soll, fiele es dann nicht auf, dass die Hintergründe beider Teilkomponenten nicht zentriert sind.

Das Problem ist nur, dass bei den Einstellungen, die ich benötige, das EditLabel standardmäßig zentriert zum LabeledEdit steht und dass die Eigenschaft Top direkt nicht geändert werden kann, weder im Objektinspektor noch wie folgt im Quellcode:

Delphi-Quellcode:
lbledt1.EditLabel.Top := lbledt1.Top; // geht nicht!
:cry:

Beim Versuch, dies zu kompilieren, erscheint die Fehlermeldung:
[DCC Fehler] Unit1.pas(38): E2129 Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden

:idea:Wie ich herausgefunden habe, lässt sich aber die Position des EditLabels trotzdem via SetBounds:cyclops: verändern:!:

Hier die Musterlösung:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Eigenschaften, die auch im Objektinspektor verändert werden können
  lbledt1.LabelPosition := lpLeft;
  lbledt1.BorderStyle := bsNone;
  lbledt1.Color := clBtnFace; // bzw. Hintergrundfarbe des Parents
  lbledt1.EditLabel.Caption := 'Eingabe:';
  lbledt1.Text := 'Beispieltext';
  // Here comes the magic!
  with lbledt1.EditLabel do
  begin
    SetBounds(Left, lbledt1.Top, Width, Height);
  end;
end;
Vielleicht kann diese Lösung auch anderen nützlich sein.

himitsu 14. Jun 2011 16:57

AW: Vertikales Ausrichten eines Textes im LabeledEdit
 
Ein LabeledEdit besteht einfach nur aus einem TLabel und einem TEdit, kombiniert in einem Delphieigenem Control ... kein Wunder, daß man zu TLabeledEdit nicht viel findert.

Du bräuchtest also nur nach einer Lösung für TEdit zu suchen, bzw. für EDIT (MSDN-Library durchsuchenCreateWindow).
Es sollte eigentlich eine Möglichkeit geben, um den text zu positionieren.

Im Forum sollte es irgendwo alte Threads geben, wo man z.B. versuchte Text rechtsbündig ins Edit zu bekommen.

Kalakmul 14. Jun 2011 17:14

AW: Vertikales Ausrichten eines Textes im LabeledEdit
 
Mit CreateWindow kenne ich mich nicht aus.:oops:

Ich kann nur vermuten, dass eine solche Lösung komplizierter wäre als die letztlich von mir gewählte.:?:

Könntest Du denn eine elegante/kurze Umsetzung mit CreateWindow angeben? Das würde mich sehr interessieren.

Falls du diesen http://www.delphipraxis.net/87407-te...usrichten.html Thread meinst, so wird dort getWindowLong und setWindowLong verwendet. Es gibt aber leider kein "es_vcenter" analog zu "es_right".


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 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