label on Click event [gelöst]

Rund um die LCL und andere Komponenten
Antworten
Dragomir
Beiträge: 40
Registriert: Di 28. Apr 2015, 12:06

label on Click event [gelöst]

Beitrag von Dragomir »

Hallo erstmal

hört sich ein wenig einfach an aber da gibt es einen kleinen hacken :)

ich bin an einem bildbearbeitungsprogramm dran und möchte darauf Textfelder erstellen gesagt getan kein Problem meine vorgehensweise war, dass ich ein memo erstellte darauf ein text schreibe und dann ein Label mit dem namen Label1,label2,label3... usw jenachdem wie viele ich erstellt habe jetz würde ich nur gerne ein on click event erstellen dass, wenn ich auf das label clicke soll es in ein memo feld wieder umgewandelt werden damit ich wieder ein text einfügen kann oder sogar es ggf bewegen

danke im voraus :mrgreen:
Zuletzt geändert von Dragomir am Mi 6. Mai 2015, 16:24, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: label on Click event

Beitrag von Michl »

Wähle im Objektinspektor das Ereigniss OnClick des entsprechenden Labels und wähle einen Eventhandler oder nutze den automatischen Vervollständiger (Button ...). Du kannst aber auch ein Control nehmen, was für das "Klicken" gedacht ist, z.B. ein TButton

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Dragomir
Beiträge: 40
Registriert: Di 28. Apr 2015, 12:06

Re: label on Click event

Beitrag von Dragomir »

Danke nur ist mein Problem dass das label in der Laufzeit erstellt wird und ich dann ja kein on click event so im objektinspektor hinzufügen kann :oops:
oder habe ich dich nur falsch verstanden :oops: :mrgreen:

Warf
Beiträge: 2119
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: label on Click event

Beitrag von Warf »

Du Brauchst eine Methode zum Event Handeln, dann geht das etwa so

Code: Alles auswählen

procedure TForm1.MyLabelClick(Sender: TObject);
begin
  With (Sender as TLabel) do
  begin
    Memo1.Left:=Left;
    Memo1.Top:=Top;
    Memo1.Text:=Caption;
    Visible:=False;
    Memo1.Visible:=True;
    Memo1.Tag:=Sender;
  end;
end;
 
procedure TForm1.CreateLable();
begin
  ...
  MyLabel.OnClick:=@MyLabelClick;
end;
 
procedure TForm1.MemoDoneEditing; //Wenn das Label wieder gezeigt wird
begin
  With (Memo1.Sender as TLabel) do
  begin
    Caption:=Memo1.Caption
    Visible:=True;
    Memo1.Visible:=False;
  end;
end;

wp_xyz
Beiträge: 5143
Registriert: Fr 8. Apr 2011, 09:01

Re: label on Click event

Beitrag von wp_xyz »

Versteh ich das richtig? Du hast mehrere Labels, und die sollen beim Anklicken editierbar werden? Warum nimmst du dann nicht gleich mehrere Memos? Den Rahmen kriegst du mit "Memo1.Border := bsNone" und die Farbe mit "Memo1.ParentColor := true" weg.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: label on Click event

Beitrag von Komoluna »

Wenn die Labels jeweils nur eine Zeile haben, kannst du exakt dasselbe auch mit einem TEdit machen.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Dragomir
Beiträge: 40
Registriert: Di 28. Apr 2015, 12:06

Re: label on Click event

Beitrag von Dragomir »

@Komoluna

ja jenachdem was der user eingeben will sind es vlt mehr zeilen

@wp_xyz

ja das ist auch ne möglichkeit ich probier es mal aus :)

@Warf
ehm ich hab da ein Problem der Memo.Tag := sender; nimmt er nicht er sagt dann er akzeptiert nur Longint und kein tobject und ohne den sender schmiert mir dsa Programm ab beim labelclick :mrgreen:

wp_xyz
Beiträge: 5143
Registriert: Fr 8. Apr 2011, 09:01

Re: label on Click event

Beitrag von wp_xyz »

Memo.Tag := sender; nimmt er nicht er sagt dann er akzeptiert nur Longint und kein tobject
Richtig, da protestiert der Compiler. Aber du kannst ihm das mit einer Typumwandlung unterschieben:

Code: Alles auswählen

 
  Memo.Tag := PtrInt(sender);
 
PtrInt ist sowas wie "Integer", nur genauso groß wie ein TObject, also ein Pointer. Das spielt eine Rolle, wenn du 64-Bit Programme schreibst. Falls du das definitiv ausschließen kannst, ginge auch (würde ich aber nicht empfehlen)

Code: Alles auswählen

 
  Memo.Tag := integer(sender);
 

Dragomir
Beiträge: 40
Registriert: Di 28. Apr 2015, 12:06

Re: label on Click event

Beitrag von Dragomir »

Danke hat alles geklappt vielen dank :)

Antworten