Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизПишу компонент TButton + TPopupMenu Найти похожие ветки
← →
GhostDog (2003-11-14 11:41) [0]Всем привет !
Подскажите кто может, ниже приведен листинг моего полуфабриката ничего сложного. Смылс такой, Кнопка у нее есть свойство Link куда записывается любое приложение которое надо запустить при нажатии на кнопку. После запуска имя этого приложения добавляется в PopupMenu(история запусков) и мне необходимо
при нажатии на элемет меню это приложение повторно занаво запускалось. Дак вот как отловить при нажатии на любой элемент его имя или заголово а потом в зависимости что у него в заголовке запускать необходимое приложение !
type
TMyButton = class(TButton)
private
fLink : string;
{ Private declarations }
protected
NewItem : TMenuItem;
MyPopupMenu : TPopupMenu;
Access,Twice : Boolean;
History : array of String;
i: Integer;
{ Protected declarations }
public
{ Public declarations }
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure Click; override;
procedure Start;
procedure ReOpen(Sender: TObject);
published
property Link : string
read fLink write fLink ;
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Standard", [TMyButton]);
end;
{ TMyButton }
procedure TMyButton.Click;
var
j: Integer ;
begin
if not Access then Start;
if Link <> "" then
begin
for j := 1 to 99 do
if History[j] = Link then
begin
Twice := true;
break;
end else Twice := false;
if not Twice then
begin
History[i] := Link;
inc(i);
NewItem := TMenuItem.Create(self);
NewItem.Caption := Link ;
NewItem.Name := "item"+IntToStr(i);
NewItem.Tag := i-1;
MyPopupMenu.Items.Add(NewItem);
end;
ShellExecute(1, "open", PChar(Link), nil, nil, SW_SHOWNORMAL);
end;
Inherited Click;
end;
procedure TMyButton.ReOpen;
begin
Caption:= MyPopupMenu.Items[0].Caption ;
end;
procedure TMyButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
var
k:integer;
begin
if (ssRight in Shift) and Access then begin
with Mouse do
MyPopupMenu.Popup(CursorPos.X,CursorPos.Y);
******MyPopupMenu.Items[0].OnClick := ReOpen;************
//как сделать чтобы при нажатии на элемент он определял его имя
//а не как у меня написано как конкретный элемент !!!
end;
end;
procedure TMyButton.Start;
begin
i := 1;
Access := true;
SetLength(History,100);
MyPopupMenu := TPopupMenu.Create(self);
end;
end.
← →
Alles55 (2003-11-14 12:22) [1]Ato napisano v Delphi Help>
procedure TForm1.AddButtonClick(Sender: TObject);
var
index: Integer;
NewItem: TMenuItem;
begin
for index := 0 to 3 do
begin
NewItem := TMenuItem.Create(PopupMenu1); // create the new item
PopupMenu1.Items.Add(NewItem);// add it to the Popupmenu
NewItem.Caption := "Menu Item " + IntToStr(index);
NewItem.Tag := index;
NewItem.OnClick = PopupMenuItemsClick;// assign it an event handler
end;
end;
procedure TForm1.PopupMenuItemsClick(Sender: TObject);
begin
//ATO TO TEBE NUJNO !!!
with Sender as TMenuItem do
begin
case Tag of
0: ShowMessage("first item clicked");
1: ShowMessage("second item clicked");
2: ShowMessage("third item clicked");
3: ShowMessage("fourth item clicked");
end;
end;
end;
To edit or destroy an item, grab its pointer via the Items property.
procedure TForm1.EditButtonClick(Sender: TObject);
var
ItemToEdit: TMenuItem;
begin
ItemToEdit := PopupMenu.Items[1];
ItemToEdit.Caption := "Changed Caption";
}
procedure TForm1.DestroyButtonClick(Sender: TObject);
var
ItemToDelete: TMenuItem;
begin
ItemToDelete := PopupMenu.Items[2];
ItemToDelete.Free;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c