Помощь - Поиск - Пользователи - Календарь
Полная версия: исполнение кода по нажатию баттона
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Гость
Возникла маленькая проблемка с нажатием кнопки. У меня выполняется код до определенного момента, а дальше программа не должна выполнятся, пока не нажата кнопка(в смысле 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;

Идея ясна?

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