Also bei dem transparentem Edit kann ich dir auch nicht helfen, aber ich hab ein editierbares Label. Und Label können transparent geschaltet werden.
Hier ein kleines Beispiel. Du brauchst ein leeres Projekt und
einige Labels drauf. Dann doppelt auf das Formular klicken damit OnCreate erstellt wird. Dann einfach dieses Beispiel ab Private einfügen.
Editierbare Labels:
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:
| private { Private-Deklarationen } procedure LabelClick(Sender: TObject); procedure EditExit(Sender: TObject); public { Public-Deklarationen } end;
var Form1: TForm1; Edit: TEdit;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); var Comp: TComponent; i: Integer; begin ShowMessage( 'Bei allen Labels muß bei OnClick LabelClick stehen.' + ^j + 'Hier im Beispiel wird das automatisch zugewiesen.'); for i := 0 to ComponentCount - 1 do begin Comp := Components[I]; if (Comp is TLabel) then with (Comp as TLabel) do begin AutoSize := False; Width := 121; Height := 21; Layout := tlCenter; OnClick := LabelClick; end; end; end;
procedure TForm1.LabelClick(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; 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 (FindComponent(Copy((Sender as TEdit).Name, 2, 64)) as TLabel).Caption := (Sender as TEdit).Text; (Sender as TEdit).Free; end; end; {Popov} |
Ganz wichtig ist, daß deine Labels bei AutoSize, Width, Height, Layout und OnClick die gleichen Eigenschaften haben wie hier im Beispiel in FormCreate. Ansonsten brauchst du das was ich in FormCreate geschrieben habe nicht. Die Routine in FormCreate hab ich nur deshalb geschrieben, damit man die Labels hier im Beispiel nicht von Hand einstellen muß.
Später in deinem Programm brauchst du nur die LabelClick und EditExit Prozeduren. Die Labels, die editierbar sein sollen, stellst du bei OnClick auf LabelClick. Den Rest erledigen die Prozeduren. Und vergiß nicht AutoSize, Width, Height und Layout der Label die editierbar sein sollen auf die Werte zu stellen. Wobei Width natürlich etwas länger sein darf.