Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.06.2011, 16:26
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию обработка события динамической кнопки

всем здрасти.
помогите мне пожалуйста, я создаю динамически кнопку

Код:
B : TBitBtn;
- глобальная переменная

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  B := TBitBtn.Create(self);
  В.Parent := self;
  
end;

как мне обработать событие кнопки? все идеи которые были в голове ошибочные..
Ответить с цитированием
  #2  
Старый 14.06.2011, 16:51
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Код:
B.OnClick:=Button1.OnClick;
Ответить с цитированием
  #3  
Старый 14.06.2011, 17:00
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию

Код:
B := TBitBtn.Create(self);
  b.Parent := self;
  b.OnClick := TBitBtn.onClick;

ошибка возникает
Код:
[Error] Unit1.pas(40): Method identifier expected
Ответить с цитированием
  #4  
Старый 14.06.2011, 17:15
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Код:
procedure MyClick(Sender: TObject);
....
procedure TForm1.MyClick(Sender: TObject);
begin
form1.caption:='Смотри внимательно'
end;

procedure TForm1.FormCreate(Sender: TObject);
var b:Tbutton;
begin
b:=TButton.Create(Self);
b.Parent:=self;
b.OnClick:=MyClick;
end;

Последний раз редактировалось Janom, 14.06.2011 в 17:17.
Ответить с цитированием
  #5  
Старый 14.06.2011, 17:19
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Код:
 b.OnClick := TBitBtn.onClick;
Сие есть ересь.
Вместо TBitBtn.onClick тут должно быть имя процедуры которое собственно и обрабатывает событие. Вот таким макаром:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage('Жмякнули!')
end;

procedure TForm1.FormCreate(Sender: TObject);
Var
  MyButton: TButton;
begin
 MyButton := TButton.Create(Self);
 MyButton.Parent := Self;
 MyButton.Left := 100;
 MyButton.Top := 100;
 MyButton.Width := 100;
 MyButton.Height := 50;
 MyButton.Caption := 'Жмякни меня!';
 MyButton.OnClick := Button1Click;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 14.06.2011, 17:22
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию

Janom, спасибо большое. помогли
Ответить с цитированием
  #7  
Старый 19.06.2011, 21:13
DGJ DGJ вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 5
Репутация: 10
По умолчанию

помогите пожалуйста, вроде сделал как у вас написано, но
[Error] aWave.dpr(139): Undeclared identifier: 'MyClick'

Код:
var
form1:tform;
z:integer;
Button1: TButton;
ColorDialog1: TColorDialog;
type
  TForm1 = class(TForm)
    Button1: TButton;
    ColorDialog1: TColorDialog;
    Edit1: TEdit;
  procedure MyClick(Sender: TObject);
end;

..................................................................................

procedure TForm1.MyClick(Sender: TObject);
begin
showmessage('1');
end;

procedure TAIMP2Visual.DisplayClick(X: Integer; Y: Integer); stdcall;
begin
Form1:= TForm.Create(Application);
 Form1.Caption:= 'Íîâîå ñîîáùåíèå';
 form1.Show;
 form1.Height:=200;
 form1.Width:=400;
 form1.Top:=10;
 form1.Left:=10;
 button1:=TButton.Create (form1);
        button1.Caption := 'button1';
        button1.Top     := 100;
        button1.Left    := 100;
        button1.Width   := 80;
        button1.Height  := 25;
        button1.Parent  := form1;
        button1.OnClick := MyClick;
end;
Ответить с цитированием
  #8  
Старый 19.06.2011, 21:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так какой Button используется? Тот что в переменной или тот что в классе?
Ответить с цитированием
  #9  
Старый 19.06.2011, 22:04
DGJ DGJ вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Так какой Button используется? Тот что в переменной или тот что в классе?

тот что в переменной, если удалить строчку из класса - ошибка та же
Ответить с цитированием
  #10  
Старый 19.06.2011, 22:15
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от DGJ
тот что в переменной, если удалить строчку из класса - ошибка та же

Одну всё же убери. И самое главное, ошибка: для её понимания советую посмотреть юнит Dialogs.pas
Ответить с цитированием
  #11  
Старый 19.06.2011, 22:20
DGJ DGJ вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 5
Репутация: 10
По умолчанию

а в чем заключается сама ошибка, или где её искать?
Ответить с цитированием
  #12  
Старый 19.06.2011, 22:24
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Уже посмотрел юнит Dialogs.pas (к примеру InputQuery)?
Ответить с цитированием
  #13  
Старый 19.06.2011, 22:38
DGJ DGJ вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 5
Репутация: 10
По умолчанию

да, посмотрел, но не пойму куда именно смотреть?
Код:
function InputQuery(const ACaption, APrompt: string;
  var Value: string): Boolean;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
  Result := False;
  Form := TForm.Create(Application);
  with Form do
    try
      Canvas.Font := Font;
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      Position := poScreenCenter;
      Prompt := TLabel.Create(Form);
      with Prompt do
      begin
        Parent := Form;
        Caption := APrompt;
        Left := MulDiv(8, DialogUnits.X, 4);
        Top := MulDiv(8, DialogUnits.Y, 8);
        Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
        WordWrap := True;
      end;
      Edit := TEdit.Create(Form);
      with Edit do
      begin
        Parent := Form;
        Left := Prompt.Left;
        Top := Prompt.Top + Prompt.Height + 5;
        Width := MulDiv(164, DialogUnits.X, 4);
        MaxLength := 255;
        Text := Value;
        SelectAll;
      end;
      ButtonTop := Edit.Top + Edit.Height + 15;
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgOK;
        ModalResult := mrOk;
        Default := True;
        SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgCancel;
        ModalResult := mrCancel;
        Cancel := True;
        SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
          ButtonWidth, ButtonHeight);
        Form.ClientHeight := Top + Height + 13;          
      end;
      if ShowModal = mrOk then
      begin
        Value := Edit.Text;
        Result := True;
      end;
    finally
      Form.Free;
    end;
end;
Ответить с цитированием
  #14  
Старый 19.06.2011, 22:46
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Код:
type
  TMyForm = class(TForm)
  private
    procedure MyClick(Sender: TObject);
  public
    constructor CreateNew(AOwner: TComponent); reintroduce;
  end;

...

constructor TMyForm.CreateNew(AOwner: TComponent);
var
  NonClientMetrics: TNonClientMetrics;
begin
  inherited CreateNew(AOwner);
  NonClientMetrics.cbSize := sizeof(NonClientMetrics);
  if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
    Font.Handle := CreateFontIndirect(NonClientMetrics.lfMessageFont);
end;

procedure TMyForm.MyClick(Sender: TObject);
begin
  ShowMessage('Ух как жмякнули');
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  Form : TMyForm;
  btn  : TButton;
begin
  Form := TMyForm.CreateNew(Application);
  try
    Form.Caption:= 'qwerty';
    Form.Height := 200;
    Form.Width  := 400;
    Form.Top    := 10;
    Form.Left   := 10;
    btn := TButton.Create(Form);
    btn.Caption := 'Жмякни';
    btn.Top     := 100;
    btn.Left    := 100;
    btn.Width   := 80;
    btn.Height  := 25;
    btn.Parent  := Form;
    btn.OnClick := TMyForm(Form).MyClick;
    Form.ShowModal;
  finally
    Form.Free;
  end;
end;

Последний раз редактировалось angvelem, 19.06.2011 в 22:49.
Ответить с цитированием
  #15  
Старый 19.06.2011, 22:59
DGJ DGJ вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 5
Репутация: 10
По умолчанию

благодарю за помощь, а не могли бы вы мне указать основные ошибки совершенные мной?
Главная моя ошибка - в отсутствии:
Код:
constructor TMyForm.CreateNew(AOwner: TComponent);
var
  NonClientMetrics: TNonClientMetrics;
begin
  inherited CreateNew(AOwner);
  NonClientMetrics.cbSize := sizeof(NonClientMetrics);
  if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
    Font.Handle := CreateFontIndirect(NonClientMetrics.lfMessageFont);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter