IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> исполнение кода по нажатию баттона, как реализовать?!!
сообщение
Сообщение #1


Гость






Возникла маленькая проблемка с нажатием кнопки. У меня выполняется код до определенного момента, а дальше программа не должна выполнятся, пока не нажата кнопка(в смысле 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.


вариант с циклом тем более не проходит - программа виснет.Подскажите, пожалуйста, как можно вообще решить эту задачу. Спасибо
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


 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.

так?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

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;


Может присоветуешь более легкую идею? А то тут код при маленьких кусках сильно увеличивается(((
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Может присоветуешь более легкую идею?
А может ты покажешь хотя бы первые 2-3 "куска" твоего кода, и объяснишь, зачем тебе вообще его надо бить на куски?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Сначала второе - зачем мне надо дробить его на куски. Я пишу программу, илюстрирующую работу определенного алгоритма.
Я должен уметь делать это 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;


То есть мой вариант выхода из процедуры не работает еще и в случае рекурсии((
Надеюсь все понятно, я не великий мастер пояснять((
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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;

Идея ясна?

Заметь, никаких разбиений на части не понадобится... Пока не будет нажата кнопка дальше код выполняться не будет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Идея ясна. Спасибо огромное
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 21.09.2020 20:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name