Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПрисвоение TNotifyEvent Найти похожие ветки
← →
webpauk © (2012-06-22 13:48) [0]Программно создаю TToolButton и передаю обработчик нажатия. Хочу, чтобы помимо обработчика выполнялся еще небольшой код при нажатии на кнопку.
type
TMyProc = Procedure(Sender: TObject) of Object;
...
public
procedure Add(const cCaption: String; Icon: TIcon; Prc: TMyProc);
...
procedure TFormpopupMenu.Add(const cCaption: String; Icon: TIcon; Prc: TMyProc);
var
fT: TToolButton;
begin
ImageList_ReplaceIcon(ImageList1.Handle, -1, Icon.Handle);
fT:=TToolButton.Create(Self);
fT.Caption:=cCaption;
fT.ImageIndex:=ImageList1.Count-1;
fT.OnClick:=Prc; {здесь хочу выполнять не только Prc, но и другую обработку}
ToolBar1.InsertControl(fT);
end;
Подскажите как правильно реализовать
← →
ProgRAMmer Dimonych © (2012-06-22 13:54) [1]Присваивать другой метод, который будет дёргать Prc и заодно выполнять всё остальное?
← →
webpauk © (2012-06-22 15:26) [2]на каждую добавляемую кнопку влом (да и бессмысленно) писать обработчик.
Реализовал так:type
TMyButtonRec = record
rTB: TToolButton;
rPrc: TMyProc;
end;
TMyButtonRecArr = array of TMyButtonRec;
var
fArr: TMyButtonRecArr ;
...
fT.OnClick:=DoClick;
SetLength(fArr, Length(fArr)+1);
with fArr[Length(fArr)-1] do
begin
rTB:=fT;
rPrc:=Prc;
end;
...
procedure TForm1.ClickButton(Sender: TObject);
var
fI: Integer;
begin
...;
for fI := Low(fArr) to High(fArr) do
begin
if fArr[fI].rTB=TToolButton(Sender) then
begin
fArr[fI].rPrc(Sender);
Break;
end;
end;
...;
end;
рогатенько... но работает.
Более интересных вариантов никто не подскажет?
← →
Ega23 © (2012-06-22 15:31) [3]
> Более интересных вариантов никто не подскажет?
В Tag записывай адрес Prc
← →
webpauk © (2012-06-22 15:36) [4]как? Integer(Prc) - ошибка...
← →
webpauk © (2012-06-22 15:40) [5]Integer(@Prc) - так наверное...
а обратное преобразование как сделать?
← →
Leonid Troyanovsky © (2012-06-22 15:44) [6]
> webpauk © (22.06.12 15:26) [2]
> Более интересных вариантов никто не подскажет?
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/01c067cc09ef3ade
--
Regards, LVT.
← →
ProgRAMmer Dimonych © (2012-06-22 15:48) [7]> [6] Leonid Troyanovsky © (22.06.12 15:44)
<OffTop>
Фигасе, через 9 лет вспомнить свой ответ на аналогичный вопрос, да ещё и найти его!
</OffTop>
← →
webpauk © (2012-06-22 15:58) [8]мля... это хорошо для 1 компонента... а мне еще и тулбар переписать надо...
не... не классно
← →
webpauk © (2012-06-22 16:04) [9]лучше уж впихнуть в tag. не знаю только как обработчик правильно из tag вытащить...
TToolButton(fT).Tag:=@Prc
подскажите как обратиться к обработчику который прописан в таге?
← →
webpauk © (2012-06-22 16:05) [10]прошу прощения...
TToolButton(fT).Tag:=Штеупук(@Prc)
← →
webpauk © (2012-06-22 16:06) [11]мля...
TToolButton(fT).Tag:=Integer(@Prc)
← →
Leonid Troyanovsky © (2012-06-22 16:13) [12]
> webpauk © (22.06.12 15:58) [8]
> мля... это хорошо для 1 компонента...
Напряги мыслительную мышцу.
> а мне еще и тулбар переписать надо...
Оному не мешает.
--
Regards, LVT.
← →
webpauk © (2012-06-22 16:20) [13]
> Leonid Troyanovsky © (22.06.12 16:13) [12]
в моем случае - это не упрощение решения, а усложнение. неинтересно.
← →
webpauk © (2012-06-22 16:25) [14]нда... а переписывать тулбар и не надо...
действительно получилось изящнее.
> Leonid Troyanovsky © (22.06.12 15:44) [6]
спасибо!
← →
webpauk © (2012-06-22 16:27) [15]
type
TMyProc = Procedure(Sender: TObject) of Object;
TMyButton = class(TToolButton)
procedure Click; override;
end;
...
procedure TMyButton.Click;
begin
TForm(Owner).Hide;
inherited;
TForm(Owner).Close;
end;
procedure TFormpopupMenu.Add(const cCaption: String; Icon: TIcon; Prc: TMyProc);
const
cLen = 20;
var
fT: TMyButton;
begin
ImageList_ReplaceIcon(ImageList1.Handle, -1, Icon.Handle);
fT:=TMyButton.Create(Self);
fT.Caption:=cCaption;
fT.ImageIndex:=ImageList1.Count-1;
fT.OnClick:=Prc;
ToolBar1.InsertControl(fT);
end;
← →
Leonid Troyanovsky © (2012-06-22 16:28) [16]
> webpauk © (22.06.12 16:20) [13]
> в моем случае - это не упрощение решения, а усложнение.
28 строк твоих (кривых) против 10 правильных.
Можно еще на inherited сэкономить, здесь он не нужен.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.083 c