Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Обработчик события


Автор: Addmin 12.8.2007, 19:15
Здравствуйте!

Ситуация:
Есть динамически создаваемые компоненты (RichEdit'ы на вкладках PageControl'а). Требуется присвоить им событие OnKeyDown (для обработки стандартных функций редактирования: Cut, Copy...)

Проблема:
Я не представляю, как это можно сделать smile

Буду рад любой помощи по вопросу! Заранее спасибо!

Автор: ivan219 12.8.2007, 19:32
Ну так создай обработчик отдельно а когда создаш компонент присовой ему этот обработчик:
Код

 Edit1.OnKeyDown := FOnKeyDown;

Автор: ALeXandrK 12.8.2007, 19:33
Напиши метод, который будет делать что-ты хочешь. 

Твоя процедура:
Код

procedure MyKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
 ....
end;


Ну и при создании компонента пишешь:
Код

...
  Edit1.OnKeyDown :=  MyKeyDown;
...


Вот и все. Теперь при нажатии клавиши будет выполняться твоя процедура MyKeyDown.

van219: эх... опередил smile 

Автор: volvo877 12.8.2007, 19:49
Цитата(ALeXandrK @  12.8.2007,  19:33 Найти цитируемый пост)
Ну и при создании компонента пишешь:

Ну, и получишь ошибку. Это должен быть метод класса, или надо делать дополнительные телодвижения, чтобы простую процедуру назначить обработчиком...

Автор: sentry 12.8.2007, 20:03
Да, будет ошибка, потому что должен еще передаваться скрытый параметер Self. Так что надо либо создать свой класс и поместить туда процедуру, либо дописать процедуру в секцию какого-нибудь уже объявленного класса, либо of object;

Автор: Addmin 12.8.2007, 20:07
Ну, возможно, дополнительные телодвижения делать вовсе и не надо, ибо всё работает по советам  ALeXandrK иivan219 smile Всем спасибо!

Автор: Sanchezzz 12.8.2007, 20:08
добавлю одно 


когда создоеш закладку присваивай ему парент и как 
выше показал ALeXandrK
я создаю закладки так и присваиваю все при создание закладки
мини пример

Код

function Tform1.CreateTabBrowser(sURL, sCaption: string): TTabSheet;
var
  ts: TTabSheet;
  WB: TWebbrowser;
begin
  // Create a new TabSheet
  ts := TTabSheet.Create(PageControl);
  Result := ts;
  try
    // Assign TTabSheet Properties
    ts.PageControl := PageControl;
    ts.Parent := PageControl;
    ts.Caption := sCaption;
    ts.PageIndex := PageControl.ActivePageIndex + 1;

    // Create a TWebbrowser instance
    WB := TWebbrowser.Create(ts);

    // put TWebbrowser on TTabSheet
    TControl(WB).Parent := ts;
    // or:   Ts.InsertControl(WB);

    // Assign Webbrowser Properties
    WB.Align := alClient;
    WB.Silent := True;
    WB.Visible := True;

    PageControl.ActivePage := ts;

    // Assign Webbrowser Events
    WB.OnProgressChange := WebBrowser1ProgressChange;
    WB.OnStatusTextChange := WebBrowser1StatusTextChange;
    WB.OnTitleChange := WebBrowser1TitleChange;
    WB.OnNewWindow2 := WebBrowser1NewWindow2; // это присваиваемые процедуры 
    WB.OnCommandStateChange := WebBrowser1CommandStateChange;  // это присваиваемые процедуры 
    WB.OnDownloadComplete := WebBrowser1DownloadComplete;  // это присваиваемые процедуры 
    WB.OnDocumentComplete := WebBrowser1DocumentComplete;// это присваиваемые процедуры 
    WB.FNavForward := False;
    WB.FNavBack := False;
    // Navigate to a URL
    if Trim(sURL) <> '' then
    begin
      WB.Navigate(sURL);
      WaitForBrowser(WB);
    end;
  except
    ts.Free;
  end;
end;

пример не на RichEdit ну перепишешь под себя smile 

Автор: Addmin 12.8.2007, 20:12
Большое спасибо, Sanchezzz, возьму на заметку smile 

Автор: Yanis 13.8.2007, 09:30
Цитата(volvo877 @  12.8.2007,  20:49 Найти цитируемый пост)
Это должен быть метод класса

Не только класса, надо отметить.

Автор: sentry 13.8.2007, 10:20
Подробнее обо всем этом http://www.rsdn.ru/article/delphi/Handlers.xml.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)