Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mi 11.02.04 01:53 
TLabel editierbar machen, so daß man Caption ändern kann?

Hier ein Tipp wie man Caption-Text eines TLabel zur Laufzeit ändern kann.

Das ganze wird mit einem Trick gemach und funktioniert so: klickt man auf das Label, dann wird eine Prozedur ausgeführt in dem ein TEdit Feld erstellt wird und das Feld über das Label gelegt wird. Verläßt man das Editfeld, dann wird der neue Text an das Label_Caption übergeben und das Edit Feld verschwindet.

Das ganze hab ich mal für ein kleine Datenbank entwickelt, bei der man durch das Editieren der Labels einigen Editfeldern eine neuen Bedutung geben konnte. Beim Beenden des Programms wurden die neuen Labelbezeichnungen abgespeichert und standen nach dem Neustart wieder zur verfügung.

Für das Beispiel braucht man einige Labels auf dem Formular. Bei allen Labels muß man das OnDblClick Ereignis auf die Prozedur LabelDblClick setzen. Hier im Beispiel wird das in der Formular Create Prozedur automatisch erledigt. Will man nicht alle Labels editierbar machen, dann muß man diesen Teil von Hand machen. Weiterhin müssen die Labelgrößen ein wenig vergrößert werden. Den Labels schadet es in der Regel nicht, da sie nur nach unten und nach rechts expandieren. Eventuell kann man die Anpassung der Länge weglassen.

Um den Labeltext zu ändern muß man den Label doppelklicken.

Hier das Beispiel:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
  private
    { Private-Deklarationen }
    Edit: TEdit;
    procedure LabelEigenschaftenAnpassen;
    procedure LabelDblClick(Sender: TObject);
    procedure EditExit(Sender: TObject);
  public
    ...

implementation

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage( 'Bei allen Labels muß bei OnDblClick LabelClick stehen.' + ^j +
               'Hier im Beispiel wird das automatisch zugewiesen.');

  LabelEigenschaftenAnpassen;
end;

// Hier werden die OnDblClicl Ereignisse auf ein Prozedur gesetzt
// Weiterhin werden die Höhe und die Breite angepasst.
procedure TForm1.LabelEigenschaftenAnpassen;
var
  Comp: TComponent;
  i: Integer;
begin
  for i :=  0 to ComponentCount - 1 do 
  begin
    Comp := Components[I];
    if (Comp is TLabel) then 
      with (Comp as TLabel) do 
      begin
        AutoSize := False;
        Height := 21;    //Label höher machen, sonnst wird Edit zu klein
        //Width := 121;  //Label breiter machen, sonnst passt der Text nicht rein
        Layout := tlCenter;
        OnDblClick := LabelDblClick;
      end;
  end;
end;

// LabelText an Edit übergeben
procedure TForm1.LabelDblClick(Sender: TObject);
begin
  if Sender is TLabel then 
  begin
    Edit := TEdit.Create(Self);
    with Edit do 
    begin
      Parent := (Sender as TLabel).Parent ; //Self;
      Name:= '_' + (Sender as TLabel).Name;
      BoundsRect := (Sender as TLabel).BoundsRect;
      //Das Editfeld etwas breiter machen als das Labelfeld
      Width := Width + (GetSystemMetrics(SM_CXFRAME) * 2);
      Text:= (Sender as TLabel).Caption;
      SetFocus;
      OnExit := EditExit;
    end;
  end;
end;

// EditText an Label übergeben
procedure TForm1.EditExit(Sender: TObject);
begin
  if Sender is TEdit then
    if (Sender as TEdit).Name[1] = '_' then 
    begin
      with (FindComponent(Copy((Sender as TEdit).Name, 264)) as TLabel) do
      begin
       Caption := (Sender as TEdit).Text;
       //Hier weitere Eigenschaften an Label zurückgeben
      end;
      (Sender as TEdit).Free;
    end;
end{Popov}

Moderiert von user profile iconjasocul: Anpassungen an den Style-Guide
Moderiert von user profile iconjasocul: Beitrag geprüft am 13.05.2006

_________________
Popov


Zuletzt bearbeitet von Popov am Mi 11.02.04 11:41, insgesamt 1-mal bearbeitet