|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Динамический Label + onClick
Здравствуйте!
Есть поле Label которое создается автоматически: Код:
title[i]:= TLabel.Create(ScrollBox1); title[i].Parent := ScrollBox1; title[i].Top := padding_top; title[i].Left := image_size+middle; title[i].Caption := t; title[i].Font.Style := [fsBold]; title[i].Font.Size:=13; title[i].Visible:= true; Вопрос: как задать для title[i] (TLabel) свойство onClick? Код:
title[i].OnClick:=ShellExecute (Handle, 'open', 'C:\file.doc', nil, nil, SW_SHOWNORMAL); Этот код выдает ошибку: Код:
Build [Error] main_form.pas(112): Incompatible types: 'TNotifyEvent' and 'Cardinal' [Fatal Error] Project.dpr(5): Could not compile used unit 'main_form.pas' |
#2
|
||||
|
||||
Код:
... title[i].OnClick:= MyClick; ... Procedure TForm1.MyClick(Sender:TObject); begin ShellExecute (Handle, 'open', 'C:\file.doc', nil, nil, SW_SHOWNORMAL); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
vah-smile (25.02.2014)
|
#3
|
||||
|
||||
Цитата:
Большое СПАСИБО! Я, просто, думал код загнать в одну строку, а получается, что для реализации этого вопроса нужно сделать свою процедуру для клика |
#4
|
||||
|
||||
Цитата:
Код:
... title[i].Tag:= i; title[i].OnClick:= MyClick; ... Procedure TForm1.MyClick(Sender:TObject); begin case (Sender as TLabel).Tag of 1: // действие 1 2: // действие 2 3: // действие 3 // итд. ... end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
vah-smile (25.02.2014)
|
#5
|
||||
|
||||
Извините за нубский вопрос (не хочу открывать новую тему): а как теперь передать в процедуру MyClick свою переменную?
Код:
procedure MyClick(Sender:TObject; var doc: string); .......... file_name:='C:\file.doc'; title[i].OnClick:=MyClick (file_name); |
#6
|
||||
|
||||
Цитата:
Код:
... type TMyLabel = class(TLabel) private fTxt : string; published property MyText: string read fTxt write fTxt; end; ... var title: array of TMyLabel; ... title[i]:= TMyLabel.Create(ScrollBox1); title[i].MyText:= 'C:\file.doc'; ... procedure MyClick(Sender:TObject); begin ShellExecute (Handle, 'open',(Sender as TMyLabel).MyText , nil, nil, SW_SHOWNORMAL); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
vah-smile (26.02.2014)
|
#7
|
||||
|
||||
Цитата:
СПАСИБО за помощь! Единственная поправка: нужно перетворить тип String в PAnsiChar Код:
procedure TForm1.MyClick(Sender:TObject); var open_file: PAnsiChar; begin open_file:=PAnsiChar((Sender as TMyLabel).MyText); ShellExecute (Handle, 'open', open_file, nil, nil, SW_SHOWNORMAL); end; |