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:
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 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;
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; Layout := tlCenter; OnDblClick := LabelDblClick; end; end; end;
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 ; Name:= '_' + (Sender as TLabel).Name; BoundsRect := (Sender as TLabel).BoundsRect; Width := Width + (GetSystemMetrics(SM_CXFRAME) * 2); Text:= (Sender as TLabel).Caption; SetFocus; OnExit := EditExit; end; end; end;
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, 2, 64)) as TLabel) do begin Caption := (Sender as TEdit).Text; end; (Sender as TEdit).Free; end; end; |
Moderiert von jasocul: Anpassungen an den Style-Guide
Moderiert von jasocul: Beitrag geprüft am 13.05.2006