Главная страница
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.017 c
1-14674
lob
2002-11-23 18:12
2002.12.05
как нужной мне переменной применить значение TItemChange


1-14565
KidMan
2002-11-19 01:55
2002.12.05
Word и расположение парграфа


1-14661
Lola
2002-11-25 10:06
2002.12.05
Проверка орфографии в TМемо.


1-14633
vladnt
2002-11-22 11:01
2002.12.05
Проблема с циклами for


1-14551
Мазут Береговой
2002-11-27 01:35
2002.12.05
Взаимодействие форм...