Witam! Jeszcze raz ja ;)
Napisalem instrukcej do tworzenia dynamicznego Menu wyglada tak:
procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
const
N = 4;
Tab : Array[1..N] of String[10] = ('WYTNIJ','KOPIUJ','WKLEJ','ZAZNACZ');
var
Punkt : TPoint;
PopUpMenu : TPanel;
Button1 : TSpeedButton;
i, y : Byte;
begin
If FindComponent('PopUp')<>nil Then Schowaj;
Handled := True;
GetCursorPos(Punkt);
Send:=Sender;
y:=0;
//Tworzenie panelu na ktorym beda przyciski
PopUpMenu:=TPanel.Create(Self);
PopUpMenu.Left:=Punkt.X-Form1.Left-26;
PopUpMenu.Top:=Punkt.Y-Form1.Top-26;
PopUpMenu.Name:='PopUp';
PopUpMenu.Parent:=Dod_Mod_Inf;
For i:=1 To 4 Do
Begin
Button1:=TSpeedButton.Create(Self);
Button1.Width:=80;
Button1.Height:=22;
Button1.Left:=0;
Button1.Name:='Pop'+IntToStr(i);
Button1.Top:=y;
Button1.Caption:=Tab[i];
Button1.Parent:=PopUpMenu;
y:=y+24;
end;
PopUpMenu.AutoSize:=True;
PopUpMenu.Refresh;
TSpeedButton(Self.FindComponent('Pop1')).OnClick:=Wytnij;
TSpeedButton(Self.FindComponent('Pop2')).OnClick:=Kopiuj;
TSpeedButton(Self.FindComponent('Pop3')).OnClick:=Wklej;
TSpeedButton(Self.FindComponent('Pop4')).OnClick:=Zaznacz;
end;
I Teraz Procedury Wytnij kopiuj wklej zazancz wygladaja mniej wiecej tak:
Procedure TForm1.Kopiuj(Sender : TObject);
begin
TEdit(Send).CopyToClipboard;
Schowaj;
end; ....
i wlasnie problem tkwi w procedurze Schowaj, kiedy np klikne Zaznacz wyrzyca mi blad: Access Viloation procedura wyglada tak:
procedure TForm1.Schowaj;
var
i : Byte;
Begin
For i:=1 To 4 Do
Begin
TSpeedButton(Self.FindComponent('Pop'+IntToStr(i))).Parent:=Nil;
TSpeedButton(Self.FindComponent('Pop'+IntToStr(i))).Free;
end;
TPanel(Self.FindComponent('PopUp')).Parent:=Nil;
TPanel(Self.FindComponent('PopUp')).Free;
end;
Co tu jest nie tak?? prosze o pomoc.
Zauwazylem jedna wazna rzecz, ze np jak kliknie sie Zaznacz i petle FOR w procedurze schowaj zrobi sie od 1 do 3 to wparwdzie ten przycisk Zaznacz nie znika ale wtedy nie pojawia sie blad.</b>