Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Своя процедура - обработчик событий на Delphi

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем добрый день. Возникла необходимость по созданию собственного обработчика событий к примеру OnClick. Но возникают некоторые нюансы.

Код:
 
......
    procedure FormShow(Sender: TObject);
 
  private
    { Private declarations }
    procedure MyListbClick(Sender: TObject; var mem:Tmemo);
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
.....
  AMsgDialog := CreateMessageDialog('Выберите интересующую запись из ', mtWarning, [mbYes]);
    with AMsgDialog do
    try
  Caption:= 'Выбор записи' ;
  Height:=300;
  Width:=300;
  mem:=tmemo.Create(AMsgDialog); {это для поля - чтение текстового файла}
  mem.Parent:=AMsgDialog;
  mem.Top:=100;
  mem.Left:=160;
  mem.Width:=150;
  listb1:=tlistbox.Create(AMsgDialog); {тут список путей к текстовым файлам}
  listb1.Parent:=AMsgDialog;
  listb1.Top:=100;
  listb1.Left:=8;
  listb1.Width:=150;
  listb1.Items:=listb.Items;
  listb1.ItemIndex:=1;
  listb1.OnClick:=MyListbClick(sender,mem); {проблема именно в создании обработчика}
  scrollWidth := 0;
...........
 
        case ShowModal of
        ID_YES: restxt:=listb1.Items[listb1.ItemIndex];//здесь Ваш код после того как диалог будет закрыт
//        ID_NO: ;
      end;
 
    finally
    listb1.Free;
    free;
    end;
.....
 
procedure TForm1.MyListbClick(Sender: TObject; var mem:tmemo);
var lb:tlistbox;
    text:string;
begin
lb:=sender as tlistbox;
text:=lb.Items[lb.ItemIndex];
mem.Lines.LoadFromFile(text);
end;
 
 

 
необходимо как то выполнить процедуру MyListbClick которая прочитает файл и передаст его содержимое в созданное поле mem или как реализовать подобную функцию, что бы на созданном каком нибудь окне в созданном каком нибудь объекте выполнить любое действие и по результатам этого действия передать параметры другому созданному объекту.
 
Добавлено:
В общем задача в основном сводится к тому что бы просто взять данные из ListBox нажатием на lisbox и передать их в Memo, не хочется делать совсем быдло-код, помогите разобраться как лучше реализовать это.  
И вообще возможно ли такое использование процедуры  
Procedure MyListbClick(Sender: TObject; var mem:tmemo);

Всего записей: 100 | Зарегистр. 01-05-2005 | Отправлено: 09:21 16-04-2018 | Исправлено: VadKomarov, 12:19 17-04-2018
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Что мешает вызывать вашу процедуру в событии onclick?

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 07:16 17-04-2018
VadKomarov



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
exteris

Цитата:
Что мешает вызывать вашу процедуру в событии onclick?

 
проблема именно в том что присвоить такую процедуру в онклик не получается listb1.OnClick:=MyListbClick(sender,mem); {проблема именно в создании обработчика}
 
если просто сделать  
listb1.OnClick:=MyListbClick(sender);
 
и
 
procedure TForm1.MyListbClick(Sender: TObject);  
 
работает а мне надо передать именно var mem:tmemo


или как мне обратиться в процедуре к созданному  
mem:=tmemo.Create(AMsgDialog);
можно пример, спасибо заранее.
 


 
Добавлено:
После долгих поисков и консультаций сделал так, ну вдруг кому пригодится.



Код:
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls, Gauges, ComCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
......
 
procedure ListB1Click(Self : TComponent; Sender: TObject);
var lb:tlistbox;
begin
lb:=sender as tlistbox;
(self.FindComponent('MyMem') as tmemo).Lines.LoadFromFile(lb.Items[lb.ItemIndex]);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var  memt,mem:tmemo;
       AMsgDialog: TForm;
       listb1:tlistbox;
       Method : TMethod;
begin
.....
 
AMsgDialog := CreateMessageDialog('Выберите интересующую запись из ', mtWarning, [mbYes]);
    with AMsgDialog do
    try
  Caption:= 'Выбор записи' ;
  Height:=300;
  Width:=300;
  mem:=tmemo.Create(AMsgDialog);
  mem.Parent:=AMsgDialog;
  mem.Top:=100;
  mem.Left:=160;
  mem.Width:=150;
  mem.Name:='MyMem';
  listb1:=tlistbox.Create(AMsgDialog);
  listb1.Parent:=AMsgDialog;
  listb1.Top:=100;
  listb1.Left:=8;
  listb1.Width:=150;
 method.Code := @ListB1Click;
 method.Data := AMsgDialog;
 listb1.OnClick:=TNotifyEvent (Method);
 listb1.ItemIndex:=0;
 
        case ShowModal of
        ID_YES: restxt:=listb1.Items[listb1.ItemIndex];//здесь Ваш код после того как диалог будет закрыт
//        ID_NO: ;
      end;
 
    finally
    listb1.Free;
    free;
    end;
.......
 
 

Всего записей: 100 | Зарегистр. 01-05-2005 | Отправлено: 07:21 17-04-2018 | Исправлено: VadKomarov, 11:48 17-04-2018
perceptron

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вряд ли кому-то это понадобится, так как этот топик никто и не найдёт с таким не очевидным названием проблемы...

Всего записей: 433 | Зарегистр. 23-12-2005 | Отправлено: 11:06 25-05-2018
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Своя процедура - обработчик событий на Delphi


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru