Помощь - Поиск - Пользователи - Календарь
Полная версия: исполнение кода по нажатию баттона
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Гость
Возникла маленькая проблемка с нажатием кнопки. У меня выполняется код до определенного момента, а дальше программа не должна выполнятся, пока не нажата кнопка(в смысле TButton)

unit Unit1;

interface

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

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

var
  Form1: TForm1;
  t:boolean;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 t:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  t:=true;
end;

procedure TForm1.FormClick(Sender: TObject);
label l;
begin
 l:
 if not t then goto l;
 Halt(0);
end;

end.


вариант с циклом тем более не проходит - программа виснет.Подскажите, пожалуйста, как можно вообще решить эту задачу. Спасибо
мисс_граффити
 unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
{кусок, который выполняется после нажатия на кнопку}
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
{первый кусок кода}
end;

end.

так?
Гость
спасибо, отличная идея. Но как реализовать такое, когда мне нужно поделить код на много частей?
мне в голову пришла только одна идея:

 var part:integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
 part:=1;
end;
procedure mycode;
begin
if part<2 then begin{1 кусок кода} exit;end;
if part<3 then begin{2 кусок кода} exit;end;
if part<4 then begin {3..} exit;end;
{ и т д}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Inc(part);
 mycode;
end;


Может присоветуешь более легкую идею? А то тут код при маленьких кусках сильно увеличивается(((
volvo
Цитата
Может присоветуешь более легкую идею?
А может ты покажешь хотя бы первые 2-3 "куска" твоего кода, и объяснишь, зачем тебе вообще его надо бить на куски?
Гость
Сначала второе - зачем мне надо дробить его на куски. Я пишу программу, илюстрирующую работу определенного алгоритма.
Я должен уметь делать это 2 способами.
Первый - по файлу с командами. Результат действия каждой новой команды я должен выводить на экран, когда пользователь нажал команду "далее". Соответственно я завершаю ввод из файла в цикле и в конце каждого цикла ждать нажатия клавишы.
Второй - это когда у меня есть код алгоритма, встроенный в программу и когда при выполнении прошел определенный его кусок - вывести данные на екран и ждать нажатия клавишы.
если первое как делать понятно:

procedure readdata;
{Считал данные, проилюстрировал, вышел}
 procedure TForm1.Button1Click(Sender: TObject);
begin
readdata;
end;


то со вторым сложнее. Единственный свой вариант предложил во 2 посте.
Насчет кода который надо дробить на куски - хотя бы процедура поиска в глубину:

procedure dfs(const v:integer);
var i:integer;
begin
 {Вывести номер текущей вершины, которую мы рассматриваем, ждать нажатия}
for i:=1 to n do
if { вершина и не рассмотрена а также есть связь в-и}
{Вывести попытку рассмотрения вершины и, ждать нажатия, dfs(i);}
end;


То есть мой вариант выхода из процедуры не работает еще и в случае рекурсии((
Надеюсь все понятно, я не великий мастер пояснять((
volvo
procedure Waiting;
begin
  ShowMessage('press any key to continue');
end;

procedure TfrmMain.Button4Click(Sender: TObject);
var i: integer;
begin
  for i := 1 to 20 do begin

    Memo1.Lines.Add(IntToStr(i));
    if i mod 4 = 0 then Waiting;

  end;
end;

Идея ясна?

Заметь, никаких разбиений на части не понадобится... Пока не будет нажата кнопка дальше код выполняться не будет...
Гость
Идея ясна. Спасибо огромное
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.