Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 20:16   #1
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
Вопрос Событие кнопки

Я пишу свою процедуру для уведомления пользователя о событиях программы. Моя процедура похожа на стандартную процедуру ShowMessage. Ну так вот - я программно создал кнопку на форме, но не знаю, как сделать, чтоб при нажатии на кнопку форма сообщения закрывалась. Вот код моей процедуры :

Код:
procedure MyShowMessage(Msg : String);
var Form : TForm;
     TextLabel : TLabel;
     HelpButton : TButton;
//   ButtonAction : TBasicAction;
//    MyEvent : TNotifyEvent;
begin
 Form := TForm.Create(Form);
  with Form do begin
   Width := 170;
   Height := 100;
   Caption := Trim('Сообщение');
   Position := poScreenCenter;
   BorderStyle := bsToolWindow;
   TextLabel := TLabel.Create(nil);
   HelpButton := TButton.Create(nil);
//   ButtonAction := TBasicAction.Create(nil);
  with TextLabel do begin
   Parent := Form;
   Left := Form.Left + 60;
   Top := Form.Top + 20;
   AlignMent := taCenter;
   Layout := tlCenter;
   Caption := Msg;
  end;
  with HelpButton do begin
   Parent := Form;
   Width := 60;
   Height := 25;
   Left := Form.Left + 50;
   Top := Form.Top + 40;
   Caption := 'OK';
   //Action := ButtonAction;
  end;
  Form.Show;
 end;
end;
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 26.02.2010 в 20:37.
Navado вне форума Ответить с цитированием
Старый 26.02.2010, 20:51   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Код:
  with HelpButton do begin
   Parent := Form;
   Width := 60;
   Height := 25;
   Left := Form.Left + 50;
   Top := Form.Top + 40;
   Caption := 'OK';
   OnClick := Button00Click;
  end;
Ну и про саму процедуру Button00Click не забываем :
Код:
procedure TForm.Button00Click(Sender: TObject);
begin
  // тут твои действия
end;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 26.02.2010 в 20:53.
Kotofff вне форума Ответить с цитированием
Старый 26.02.2010, 21:26   #3
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию

Вроде всё получилось. Спасибо за помощь

22:04

Ты написал процедуру формы. А мне Компилятор пишет неизвестный идентификатор Form. Я объявил в проге новый класс, запускаю прогу, а мне выскакивает Resource Form Not Found. И чего теперь делать? В моей процедуре Form - это локальная переменная, поэтому я не могу создать своё событие Button00Click

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Уважайте форумчан, и они ответят вам взаимностью...
Модератор


Прекращайте ненужное цитирование предыдущих сообщений!
А кроме кнопки "Цитата" есть просто окно для ввода своего сообщения.
Модератор

Последний раз редактировалось mihali4; 27.02.2010 в 00:11.
Navado вне форума Ответить с цитированием
Старый 26.02.2010, 22:17   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Покажи шапку модуля.
Как ты объявляешь там все.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 26.02.2010, 22:54   #5
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию

Вот весь мой юнит :
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActnList, OMEGA;

type
  TForm1 = class(TForm)
    Button2: TButton;
    Label1: TLabel;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure MyShowMessage(Msg : String);
var TextLabel : TLabel;
    HelpButton : TButton;
    Form : TForm;
    Button00Click : procedure(Sender : TObject) of object;
begin
 Form := TForm.Create(nil);
  with Form do begin
   Width := 170;
   Height := 100;
   Caption := Trim('Ñîîáùåíèå');
   Position := poScreenCenter;
   BorderStyle := bsToolWindow;
   TextLabel := TLabel.Create(nil);
   HelpButton := TButton.Create(nil);
  with TextLabel do begin
   Parent := Form;
   Left := Form.Left + 60;
   Top := Form.Top + 20;
   AlignMent := taCenter;
   Layout := tlCenter;
   Caption := Msg;
  end;
//  with Button00Click do
//   Form.Close;
//  end;
  with HelpButton do begin
   Parent := Form;
   Width := 60;
   Height := 25;
   Left := Form.Left + 50;
   Top := Form.Top + 40;
   Caption := 'OK';
   OnClick := Button00Click;
  end;
  Form.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MyShowMessage('1111111');
end;
Когда я объявил процедуру Button00Click через переменную прога скомпилилась, я нажимаю на кнопку, но вылазиет ошибка так как процедура - это переменная без какого либо значения. Я не знаю, как локально объявлять процедуры, кроме как через переменные. . .

Последний раз редактировалось Navado; 26.02.2010 в 22:57.
Navado вне форума Ответить с цитированием
Старый 27.02.2010, 00:16   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Поправил. Работает. Привел скудные комментарии - но думаю будет достаточно.
Код:
unit Unit2;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button2: TButton;
    Label1: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button00Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Form : TForm;  // твоя создаваемая форма она должна быть глобальной переменной модуля

implementation
{$R *.dfm}

procedure MyShowMessage(Msg : String);
var TextLabel : TLabel;
    HelpButton : TButton;
begin
  Form := TForm.Create(nil);
  with Form do
    begin
    Width := 170;
    Height := 100;
    Caption := Trim('Заголовок');
    Position := poScreenCenter;
    BorderStyle := bsToolWindow;
    TextLabel := TLabel.Create(Form);
    HelpButton := TButton.Create(Form);
  with TextLabel do
    begin
    Parent := Form;
    Left := Form.Left + 60;
    Top := Form.Top + 20;
    AlignMent := taCenter;
    Layout := tlCenter;
    Caption := Msg;
    end;
  with HelpButton do
    begin
    Parent := Form;
    Width := 60;
    Height := 25;
    Left := Form.Left + 50;
    Top := Form.Top + 40;
    Caption := 'OK';
    OnClick := Form1.Button00Click; // т.к. процедура MyShowMessage является сторонней для Form1,
                                                // то обращение к Button00Click пишем так
    end;
    Form.Show;
    end;
end;

procedure TForm1.Button00Click(Sender: TObject);
begin
  if Form <> nil then Form.Close; // если Form была создана, то закрываем ее,
                                            // если нет - то ничего не произойдет
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  MyShowMessage('Сообщение !!!');
end;

end.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 27.02.2010, 10:57   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
твоя создаваемая форма она должна быть глобальной переменной модуля
Ну это совсем не обязательно
Можно вполне локализировать ее и забыть о переменной в данной ситуации, а в обработчиках создаваемой формы обращаться так:
Код:
procedure TForm1.Button00Click(Sender: TObject);
begin
  if TForm(TButton(sender).Parent) <> nil then TForm(TButton(sender).Parent).Close; 
// если Form была создана, то закрываем ее,
                                            // если нет - то ничего не произойдет
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2010, 13:17   #8
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию

Ладно. С процедурой разобрались. Я вот ещё что хотел спросить - в стандартной процедуре ShowMessage если вводишь длинное сообщение, то форма растягивается в зависимости от длины сообщения, а метка с надписью остается всё время посередине. Подскажите как мне тоже самое сделать в моей процедуре?
Navado вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие vitamin.rulez Помощь студентам 7 10.02.2009 11:46
Событие terminadoor Общие вопросы Delphi 13 17.07.2008 09:25
Событие maha Общие вопросы Delphi 6 18.06.2008 18:53
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35