Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.01 c
3-14416
Alexey Goosev
2002-11-16 13:26
2002.12.05
Предикат CONTAINING (ламерский вопос :)


6-14707
Pavel_S
2002-10-08 10:19
2002.12.05
Проблема с UDP


14-14810
VaS
2002-11-15 09:35
2002.12.05
Средства отлова ликов


14-14783
Fiend
2002-11-15 09:21
2002.12.05
День радио телевидения и связи


14-14794
KDS
2002-11-15 11:30
2002.12.05
Прикольные фразы из компутерной жизни




   Наверх