Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Вниз

УЖАВАЕМЫЕ МАСТЕРА! Как выйти из цикла?!   Найти похожие ветки 

 
NDR   (2002-08-12 13:07) [0]

Организую поиск далее, поиск внутри поля:

procedure TForm1.Button1Click(Sender: TObject);
var
f,r:boolean;
w,w0,wn:string;
key:char;
label gonext;
begin
if (length(Edit1.Text)=0) then fnend: exit; // искать нечего
TRY
begin
r:=false;
repeat
form1.refresh;

if (length(Edit1.Text)=0) then exit;
if table1.RecNo>1 then table1.Next;
f:=false;
repeat
w:=(Edit1.text);
if (dbgrid1.SelectedField.AsString="") then begin
//==
goto gonext;
//==
end else begin

while pos(" ",w)>0 do delete(w,pos(" ",w),1);
while w[1]=" " do delete(w,1,1);
while w[length(w)]=" " do delete(w,length(w),1);
f:=true;
wn:=(table1[dbgrid1.SelectedField.DisplayName]);

while length(w)>0 do begin
if pos(" ",w)>0 then begin
w0:=copy(w,1,pos(" ",w)-1);
delete(w,1,pos(" ",w));
end else begin

w0:=w;
w:="";
end;
if f then f:=pos(w0,wn)>0
end;
gonext: if not f then table1.Next;
end;
until ((table1.RecNo=53210) or (f));

if ((table1.RecNo=table1.RecordCount) and (not f)) then
r:= MessageDlg("Не найдено "+Edit1.text+" Вернуться к началу ?",
mtConfirmation, [mbYes, mbNo], 0) = mrYes;
if not f then
if r then begin
table1.First;
r:=false;
end;
until not r;
end;
FINALLY
DBGrid1.Refresh;
END;
end;
=======База большая. 53"312 позиций.
Как по нажатию на Esc прекращать(останавливать) поиск.
У меня неполучается.

Внутри цикла (repeat) пишу
if key:=#27 then exit;Помойму "exit" выход из цикла?! непомню...
Если использовать событие формы Form1.onKeyDown(or onKeyPress) то нажатие просто игнорируется.
Пока не будет обработана последняя запись поиск не прекращается.
Подскажите пожалуйста как мне решить эту проблему.

с Уважением, NDR


 
Kaban   (2002-08-12 13:12) [1]

заводишь глобальный флаг ESCPressed:Boolean = false;
в OnKeyPress:
if Key = #27 then ESCPressed:=true;

в том месте, где нужно выйти из цикла пишешь:

Application.processmessages;
if ESCPressed then exit;



 
Desdechado   (2002-08-12 13:15) [2]

1. break выход из цикла
2. вставь в цикл Application.ProcessMessages


 
NDR   (2002-08-12 14:38) [3]

Okey! попробую ....


 
NDR   (2002-08-12 15:14) [4]

Ничего невыходит. ПИшу так

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then ESCPressed:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
f,r:boolean;
w,w0,wn:string;
key:char;
label gonext;
begin
if (length(Edit1.Text)=0) then fnend: exit; // искать нечего
TRY
begin
r:=false;
repeat

Application.processmessages;
if ESCPressed then exit;


form1.refresh;
if (length(Edit1.Text)=0) then exit;
if table1.RecNo>1 then table1.Next;
f:=false;
repeat
w:=(Edit1.text);
if (dbgrid1.SelectedField.AsString="") then begin
//==
goto gonext;
//==
end else begin

while pos(" ",w)>0 do delete(w,pos(" ",w),1);
while w[1]=" " do delete(w,1,1);
while w[length(w)]=" " do delete(w,length(w),1);
f:=true;
wn:=(table1[dbgrid1.SelectedField.DisplayName]);

while length(w)>0 do begin
if pos(" ",w)>0 then begin
w0:=copy(w,1,pos(" ",w)-1);
delete(w,1,pos(" ",w));
end else begin

w0:=w;
w:="";
end;
if f then f:=pos(w0,wn)>0
end;
gonext: if not f then table1.Next;
end;
until ((table1.RecNo=53210) or (f));

if ((table1.RecNo=table1.RecordCount) and (not f)) then
r:= MessageDlg("Не найдено "+Edit1.text+" Вернуться к началу ?",
mtConfirmation, [mbYes, mbNo], 0) = mrYes;
if not f then
if r then begin
table1.First;
r:=false;
end;
until not r;
end;
FINALLY
DBGrid1.Refresh;
END;
end;

И через "BREAK" тоже пробовал... Через BREAK - даже больше похоже на правду. но всё равно не калбасит... нет результата.
Что делать ?
Исправьте Код как считаете он должен работать !!!!!

с Уважением, NDR


 
gek   (2002-08-12 15:28) [5]


Установить у формы KeyPreview = true


procedure TForm1.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
begin
if Key = VK_ESCAPE then ESCPressed:=true;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
f,r:boolean;
w,w0,wn:string;
key:char;
label gonext;
begin
ESCPressed:=false;
.........



 
SaS13   (2002-08-12 15:32) [6]

NDR (12.08.02 15:14)
у тебя в коде есть еще вложенный цикл, может и там следует проверочку поставить?


 
Bars   (2002-08-16 23:19) [7]

Не EXIT а BREAK



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.025 c
3-13928
dimushkin
2002-08-14 17:15
2002.09.05
Проблема с LangDriver ом :-(


14-14235
alex_white
2002-08-10 13:13
2002.09.05
Ищу и не могу найти


1-14026
KPY
2002-08-26 14:35
2002.09.05
Помогите c RichEdit


14-14242
Razpizdyi
2002-08-10 07:59
2002.09.05
Смена иконок


3-13920
Reticent
2002-08-14 12:40
2002.09.05
SQL to ORACLE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский