Текущий архив: 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