Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1347559192
***
2012-09-13 21:59
2013.03.22
Возможно ли такое?


15-1353702602
Юрий
2012-11-24 00:30
2013.03.22
С днем рождения ! 24 ноября 2012 суббота


2-1331910674
leklerk
2012-03-16 19:11
2013.03.22
Доступ к данным через TDBGrid и TADODataSet


2-1334905984
Sa1exn
2012-04-20 11:13
2013.03.22
Изменение шрифта для форм


15-1347984690
Rouse_
2012-09-18 20:11
2013.03.22
Неспешно начинаю организовывать КМП





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский