Hallo Gemeinde,
in meinem Programm erzeuge ich zur Laufzeit ein bzw. mehrere Objekte/Instanzen (in diesem Bsp. MyLabeledLED).
Sind diese LED's nun auf dem Formular zu sehen, kann man diese umherschieben, "anknipsen", etc.
Zusätzlich erzeuge ich dynamisch ein PopupMenu, wenn man auf die LED mit der rechten Maustaste drückt.
Folgendes Problem.
Klicke ich mit ssRight auf LED1 (und es ist noch keine weitere LED vorhanden), ist alles OK.
Sind aber mehrere LED's vorhanden und ich klicke wieder mit ssRight auf LED1, so erscheint das PopupMenu an der zuletzt erstellten LED und nicht bei LED1.
Hat jemand eine Ahnung, was ich verkehrt mache?
Anbei der Code.
Danke und Grüsse
Peter
<
// Hier wird die LED erzeugt
procedure TForm2.NeueClick(Sender: TObject);
begin
inc(MyCounter);
MyLabeledLED := TLabeledLED.Create(Self);
with MyLabeledLED do
begin
Name := 'LabeledLED'+IntToStr(MyCounter);
Parent := Self;
Left := 416;
Top := 88;
LedStyle := lstSquare;
LEDColor := lctGreen;
LEDLabel.Width := 39;
LEDLabel.Height := 13;
LEDLabel.Caption := 'LED';
OnMouseDown := MyMouseDown;
end;
MyLabeledLED.Show;
end;
// Hier wird das PopUpMenu erzeugt
procedure TForm2.MyMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i: Integer;
MyPopupMenu: TPopupMenu;
MyNamen: TMenuItem;
MyN: TMenuItem;
MyLoeschen: TMenuItem;
begin
inherited MouseDown(Button, Shift, X, Y);
if Shift = [ssRight] then begin
for i:= 0 to ComponentCount -1 do begin
if Components[i] is TPopupMenu then begin
Components[i].Destroy;
Break;
end;
end;
MyPopupMenu := TPopupMenu.Create(Self);
MyNamen := TMenuItem.Create(MyPopupMenu);
MyPopupMenu.Items.Add(MyNamen);
MyN := TMenuItem.Create(MyPopupMenu);
MyPopupMenu.Items.Add(MyN);
MyLoeschen := TMenuItem.Create(MyPopupMenu);
MyPopupMenu.Items.Add(MyLoeschen);
MyLabeledLED.PopupMenu:= MyPopUpMenu;
with MyPopupMenu do
begin
Name := 'PopupMenu'+IntToStr(MyCounter);
end;
with MyNamen do
begin
Name := 'Namen'+IntToStr(MyCounter);
Caption := 'Namen '#228'ndern';
// OnClick := Namen1Click;
end;
with MyN do
begin
Name := 'N1'+IntToStr(MyCounter);
Caption := '-';
end;
with MyLoeschen do
begin
Name := 'Loeschen'+IntToStr(MyCounter);
Caption := 'L'#246'schen';
// OnClick := Loeschen;
end;
X:= X+Unit1.Form1.GetXPos;
X:= X+MyLabeledLED.Left;
Y:= Y+Unit1.Form1.GetYPos;
Y:= Y+MyLabeledLED.Top;
MyPopUpMenu.Popup(x,y);
end;
end;
>
in meinem Programm erzeuge ich zur Laufzeit ein bzw. mehrere Objekte/Instanzen (in diesem Bsp. MyLabeledLED).
Sind diese LED's nun auf dem Formular zu sehen, kann man diese umherschieben, "anknipsen", etc.
Zusätzlich erzeuge ich dynamisch ein PopupMenu, wenn man auf die LED mit der rechten Maustaste drückt.
Folgendes Problem.
Klicke ich mit ssRight auf LED1 (und es ist noch keine weitere LED vorhanden), ist alles OK.
Sind aber mehrere LED's vorhanden und ich klicke wieder mit ssRight auf LED1, so erscheint das PopupMenu an der zuletzt erstellten LED und nicht bei LED1.
Hat jemand eine Ahnung, was ich verkehrt mache?
Anbei der Code.
Danke und Grüsse
Peter
<
// Hier wird die LED erzeugt
procedure TForm2.NeueClick(Sender: TObject);
begin
inc(MyCounter);
MyLabeledLED := TLabeledLED.Create(Self);
with MyLabeledLED do
begin
Name := 'LabeledLED'+IntToStr(MyCounter);
Parent := Self;
Left := 416;
Top := 88;
LedStyle := lstSquare;
LEDColor := lctGreen;
LEDLabel.Width := 39;
LEDLabel.Height := 13;
LEDLabel.Caption := 'LED';
OnMouseDown := MyMouseDown;
end;
MyLabeledLED.Show;
end;
// Hier wird das PopUpMenu erzeugt
procedure TForm2.MyMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i: Integer;
MyPopupMenu: TPopupMenu;
MyNamen: TMenuItem;
MyN: TMenuItem;
MyLoeschen: TMenuItem;
begin
inherited MouseDown(Button, Shift, X, Y);
if Shift = [ssRight] then begin
for i:= 0 to ComponentCount -1 do begin
if Components[i] is TPopupMenu then begin
Components[i].Destroy;
Break;
end;
end;
MyPopupMenu := TPopupMenu.Create(Self);
MyNamen := TMenuItem.Create(MyPopupMenu);
MyPopupMenu.Items.Add(MyNamen);
MyN := TMenuItem.Create(MyPopupMenu);
MyPopupMenu.Items.Add(MyN);
MyLoeschen := TMenuItem.Create(MyPopupMenu);
MyPopupMenu.Items.Add(MyLoeschen);
MyLabeledLED.PopupMenu:= MyPopUpMenu;
with MyPopupMenu do
begin
Name := 'PopupMenu'+IntToStr(MyCounter);
end;
with MyNamen do
begin
Name := 'Namen'+IntToStr(MyCounter);
Caption := 'Namen '#228'ndern';
// OnClick := Namen1Click;
end;
with MyN do
begin
Name := 'N1'+IntToStr(MyCounter);
Caption := '-';
end;
with MyLoeschen do
begin
Name := 'Loeschen'+IntToStr(MyCounter);
Caption := 'L'#246'schen';
// OnClick := Loeschen;
end;
X:= X+Unit1.Form1.GetXPos;
X:= X+MyLabeledLED.Left;
Y:= Y+Unit1.Form1.GetYPos;
Y:= Y+MyLabeledLED.Top;
MyPopUpMenu.Popup(x,y);
end;
end;
>
Comment