Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Вопрос про глобальную переменную?   Найти похожие ветки 

 
For   (2002-11-25 04:58) [0]

Мастера посмотрел я здесь на форуме ответы как организовать работу с глобальной переменной да неполучается у меня.
Мне нужно чтобы из одной формы вызывалась модальная другая форма, а в ней Edit, если я ввожу в этот Edit строку надо чтобы при закрытии этой модальной формы эта строка как строковая переменная передавалась главной форме из которой вызывали модальную форму. Приведите сабж пожалуйста подробно насколько можете?


 
trotski   (2002-11-25 06:00) [1]

Ну, все что есть в модальной форме в любой момент времени доступно главной. Это раз. А во вторых тебе никто не мешает в объявлении второй формы(которая модальная), т.е. в описании ее класса, в разделе public указать некую переменную s:string. Тогда перед закрытием формы можно делать Form2.s:=Form2.Edit1 к примеру. А потом из главной формы смотреть Form2.s


 
For   (2002-11-25 08:16) [2]

Спасибо >trotski< я разобрался, только я написал вместо
Form2.s:=Form2.Edit1 так S:=Edit1.Text; Form2.s:=S ; и все заработало.


 
Юрий Зотов ©   (2002-11-25 09:28) [3]

А при же чем здесь глобальная переменная? В данном случае она не нужна, да и вообще старайтесь обходиться без них.

procedure TForm1.Buttton1Click(Sender: TObject);
begin
with TForm2.Create(nil) do
try
if ShowModal = mrOK then Self.Caption := Edit1.Text
finally
Free
end
end;

А вообще-то, в Delphi есть готовая функция InputQuery, которая делает то же самое. Пример есть в хелпе.


 
For   (2002-11-25 09:55) [4]

>Юрий Зотов< Хорошая подсказка!!!!!!!!


 
Леван   (2002-11-25 09:56) [5]

Программа InputQuery возвращает набранный текст в едите после нахатия (клика мишкой) на кнопку ОК
а вот на основе идеи InputQuery я написал другую функцию, которая возвращает набранное значение после нажатия на enter в поле edit. Все компонентиы, включая формы, создаются и уничтожаются динамически. (Программа работает наподобие клипперовской say-get). Единственное, надо создат класс tmyedit=class(tedit) для объявления обработчика onkkeypress
динамически. (я пришел с CLIPPERа и мне очень хотелось иметь такуую функцию для использования в любом месте программи и не заботится об обработчиках)

TmyEdit=class(tedit)
procedure mypress(sender:tobject;var key:char);
procedure mydblclick(sender:tobject);
end;


Function inputread(prompt:string;defaultvalue:variant;maxwidth:integer):variant;
VAR
FORM:TFoRM;
edit:tmyedit;
LSourceType: TVarType;
mylabel:tlabel;
panel:tpanel;
mw:integer;
lp:integer;
BEGIN
lp:=length(prompt);
mw:=maxwidth;
lsourcetype:=vartype(defaultvalue);
RESULT:=defaultVALUE;
FORM:=TFoRM.CREATE(APPLICATION);
panel:=tpanel.create(form);
panel.Parent:=form;
panel.Align:=alClient;
panel.caption:="";
panel.BorderStyle:=bsSingle;
panel.BevelInner:=bvRaised;
FORM.Height:=form.Font.size+16;
form.Top:=(screen.Height div 2)-20;
form.Width:=(form.Font.size*(mw+lp)*3 div 4) +7;
form.Left:=(screen.Width-form.Width) div 2;
form.Caption:="";
FORM.BorderStyle:=bsNone;
FORM.BorderIcons:=[];
form.tag:=0;
//
mylabel:=tlabel.Create(panel);
mylabel.parent:=panel;
mylabel.caption:=prompt;
mylabel.AutoSize:=true;
mylabel.Left:=2;
// mylabel.Height:=form.Height-4;
mylabel.Top:=1;
mylabel.visible:=true;
//
edit:=tmyedit.create(panel);
edit.parent:=panel;
edit.Height:=mylabel.Height;
edit.Top:=0;
edit.Left:=mylabel.width+3;
edit.width:=form.font.size*mw*3 div 4;
edit.Enabled:=true;
edit.visible:=true;
edit.color:= $00FFFF00 ; //yellow
edit.Font.color:= $00FF0000; //red
edit.OnKeyPress:=edit.mypress;
edit.Ondblclick:=edit.mydblclick;
//
while true do
begin
try
case lsourcetype of
varSmallint : edit.Text:=inttostr(defaultvalue);
varInteger : edit.Text:=inttostr(defaultvalue);
varSingle : edit.Text:=inttostr(defaultvalue);
varDouble : edit.Text:=Floattostr(defaultvalue);
varCurrency : edit.Text:=floattostr(defaultvalue);
varDate : edit.Text:=datetostr(defaultvalue);
varShortInt : edit.Text:=inttostr(defaultvalue);
varWord : edit.Text:=inttostr(defaultvalue);
varLongWord : edit.Text:=inttostr(defaultvalue);
varInt64 : edit.Text:=inttostr(defaultvalue);
varString : edit.Text:=DefaultValue;
end;
FORM.ShowModal();
IF FORM.TAG=1 THEN
case lsourcetype of
varNull : result:=edit.Text;
varSmallint : result:=strtoint(edit.Text);
varInteger : result:=strtoint(edit.Text);
varSingle : result:=strtoint(edit.Text);
varDouble : result:=strtofloat(edit.Text);
varCurrency : result:=strtofloat(edit.Text);
varDate : result:=strtodate(edit.Text);
varShortInt : result:=strtoint(edit.Text);
varWord : result:=strtoint(edit.Text);
varLongWord : result:=strtoint(edit.Text);
varInt64 : result:=strtoint(edit.Text);
varString : result:=edit.Text;
end;
EDIT.Free();
mylabel.free();
panel.free();
FORM.Free();
break;
except
end;
end;


END;

procedure tMyedit.mypress(sender:tobject;var key:char);
begin
IF LENGTH(TEXT)=1 THEN SelSTART:=1;
if key=#27 then
begin
tform(tEdit(sender).parent.parent).tag:=0;
tform(tEdit(sender).parent.parent).close();

end;
if key=#13 then
begin
tform(tEdit(sender).parent.parent).tag:=1;
tform(tEdit(sender).parent.parent).close();
end;
end;

procedure tMyEdit.mydblclick(sender:tobject);
begin
tform(tEdit(sender).parent.parent).close();
end;








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

Текущий архив: 2002.12.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
1-14665
Silentor
2002-11-18 19:21
2002.12.05
Посоветуйте TimerList


3-14392
Spartak
2002-11-14 20:42
2002.12.05
Какие файлы использует приложение с базой данных ?


3-14457
bigbill
2002-11-18 00:15
2002.12.05
Query с CD-ROM а


8-14685
Aleshka
2002-08-16 20:54
2002.12.05
Может кто знает как перевести HSV->RGB


1-14555
Dmitrey
2002-11-26 09:24
2002.12.05
Как подключить в программу проверку файлов на вирусы