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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 17:11   #1
admroot
Пользователь
 
Аватар для admroot
 
Регистрация: 14.04.2009
Сообщений: 15
По умолчанию нажатие на кнопку

подСкажите пожалуйста процедуру, что бы при нажатии на кнопку выполнялось одно действие, а если нажать на эту же кнопку повторно, то другое действие. Это вообще возможно в Delphi?
admroot вне форума Ответить с цитированием
Старый 23.10.2010, 17:15   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Можно юзать какую-нить переменную, for example:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var 
     N:Integer;
Begin
        If N = 1 Then 
        Begin
                Inc(N);
                ShowMessage('Hello');
        End;
        If N = 2 Then
        Begin
                Dec(N);
                ShowMessage('Bye');
        End;
End;
_-Re@l-_ вне форума Ответить с цитированием
Старый 23.10.2010, 17:17   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да конечно, но в разных ситуациях оптимальность разных методов различна, и каждый метод хорош только для своей ситуации.
Например можно хранить массив процедур. При нажатии на кнопку передать выполнение очередному элементу массива, и переместить индекс массива на следующий.
А можно просто CASE проверять число кликов, и выполнять по условиям.
Короче все от задачи зависит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2010, 17:18   #4
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Цитата:
Сообщение от admroot Посмотреть сообщение
подСкажите пожалуйста процедуру, что бы при нажатии на кнопку выполнялось одно действие, а если нажать на эту же кнопку повторно, то другое действие. Это вообще возможно в Delphi?
Ну, подобное можно например реализовать так(простенький пример):

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f:boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if f then
  begin
    Memo1.Lines.Add('Новая строка');
    f:=false;
  end
  else
    Memo1.Lines.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  f:=true;
end;

end.
vasek123 вне форума Ответить с цитированием
Старый 23.10.2010, 17:21   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Тож самое, vasek123
_-Re@l-_ вне форума Ответить с цитированием
Старый 23.10.2010, 18:46   #6
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
подСкажите пожалуйста процедуру, что бы при нажатии на кнопку выполнялось одно действие, а если нажать на эту же кнопку повторно, то другое действие. Это вообще возможно в Delphi?
Слишком туманное описание ТЗ.....
Цитата:
Можно юзать какую-нить переменную, for example:
Эм... А ничё что она у вас локальная, да ещё и неинициализированная? ))

Как вариант:
Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ButtonFirstProc(Sender: TObject);
    procedure ButtonSecondProc(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.OnClick:=ButtonFirstProc;
end;

procedure TForm1.ButtonFirstProc(Sender: TObject);
begin
TButton(Sender).OnClick:=ButtonSecondProc;
ShowMessage('First proc');
end;

procedure TForm1.ButtonSecondProc(Sender: TObject);
begin
TButton(Sender).OnClick:=ButtonFirstProc;
ShowMessage('Second proc');
end;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 23.10.2010, 18:50   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Эм... А ничё что она у вас локальная, да ещё и неинициализированная? ))
А ничё что это пример кода??
_-Re@l-_ вне форума Ответить с цитированием
Старый 23.10.2010, 20:49   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Эй, господа, не сорьтесь.
Давайте дождемся автора.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2010, 02:02   #9
admroot
Пользователь
 
Аватар для admroot
 
Регистрация: 14.04.2009
Сообщений: 15
По умолчанию

Всем огромнейшее спасибо за оперативность. Вариант от _-Re@l-_ оказался мне более простым и понятным для моей супер простой задачи, извиняюсь что
Цитата:
DomiNick туманно написал
только почему то не работает:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var 
     N:Integer;
Begin
        If N = 1 Then 
        Begin
                Inc(N);
                ShowMessage('Hello');
        End;
        If N = 2 Then
        Begin
                Dec(N);
                ShowMessage('Bye');
        End;
End;
vasek123 а можно с зацикливанием repeat until наверно, что б нажал, появилась строка, нажал очистилась, нажал - появилась и т д:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
Repeat

  if f then
  begin
    Memo1.Lines.Add('Новая строка');
    f:=false;
  end
  else
    Memo1.Lines.Clear;

    Until (???);
end;
DomiNick а что это за процедуры?

Код:
    procedure ButtonFirstProc(Sender: TObject);
    procedure ButtonSecondProc(Sender: TObject);

Последний раз редактировалось admroot; 24.10.2010 в 02:35.
admroot вне форума Ответить с цитированием
Старый 24.10.2010, 02:09   #10
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Эм... А ничё что она у вас локальная, да ещё и неинициализированная? ))
Локальные переменные как-раз инициализируются!
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нажатие кнопки beygul Помощь студентам 2 30.01.2010 21:34
PopupMenu по нажатие на кнопку KoBRaAndrey Общие вопросы Delphi 4 25.12.2009 23:37
Долгое нажатие клавиши в KeyDown как одно нажатие marina15056 Общие вопросы Delphi 7 16.08.2009 00:22
Нажатие клавиш bashkos JavaScript, Ajax 6 23.09.2008 19:01