Текущий архив: 2003.06.05;
Скачать: CL | DM;
Вниз
Почему не работает присвоение TLabel.Caption? Найти похожие ветки
← →
Marina_S (2003-05-21 11:54) [0]Я столкнулась со следующей проблемой: в новом модуле программы при выполнении команды form5.Label2.Caption:=StrPas(ptext); или вообще любого присвоения form5.LabelN.Caption какого-то значения
выдается ошибка (rase exeption... и т.д.). Помогите, пожалуйста, разобраться, в чем дело. Заранее спасибо!
← →
Skier (2003-05-21 12:03) [1]>Marina_S (21.05.03 11:54)
Всё дело в ptext. Что-то там не то...
← →
Skier (2003-05-21 12:09) [2]form5.Label2.Caption := "Hello, world !";
Тоже даст exception ?
← →
Marina_S (2003-05-21 12:11) [3]Я проверяла Watch"ем - все нормально. И потом если заменить
это строку, например, строкой form5.Label2.Caption:="123"; - выдается та же самая ошибка. Аналогичный код (с ptext"ом) в другом модуле (с другой меткой, на другой форме) прекрасно работает....
← →
DesWind (2003-05-21 12:12) [4]А може у тебя форма 5 не создана?
← →
Skier (2003-05-21 12:15) [5]>Marina_S (21.05.03 12:11)
Не поможет ?
if Assigned(form5) then begin
with form5 do Label2.Caption := "123";
end; //if
← →
Marina_S (2003-05-21 12:16) [6]:) Создана!
← →
Marina_S (2003-05-21 12:22) [7]Теперь без всяких ошибок, но caption остается старым :(
Что же это такое с моей формой? И как это исправить?
← →
Skier (2003-05-21 12:24) [8]>Marina_S (21.05.03 12:22)
Значит 2 варианта :
1) Форма не создана
2) Форма создана, но обнулён указатель на нее, т.е form5 = nil
← →
Marina_S (2003-05-21 12:30) [9]form5:=TForm5.create(application); - достаточно для создания формы? Если без изменений заголовков меток, форма появляется без ошибок... А что делать с указателем?
← →
Skier (2003-05-21 12:32) [10]
> form5:=TForm5.create(application); - достаточно для создания
> формы?
Вполне.
> А что делать с указателем?
В каком смысле ?
← →
Marina_S (2003-05-21 12:37) [11]Да тут замкнуты круг получается - в программе у меня форма создается form5:=TForm5.create(application); До изменения заголовков меток она прекрасно работала. После добавления
LabelN.Caption:=mstring; заголовки меток не изменяются, потому что форма не создана... Это как так?
← →
Sheriff (2003-05-21 12:38) [12]Эххх... сейчас бы код посмотреть...
да побольше... ;)
← →
DesWind (2003-05-21 12:41) [13]Для создания форм я использую Application.CreateForm(TForm5,form5). хотя и в товоем случае все должно работать. Но чем черт нешутит.
← →
Skier (2003-05-21 12:41) [14]var
form5 : TForm5;
begin
form5 := TForm5.create(Application);
try
with form5 do begin
Label2.Caption := "Hello, world !";
ShowModal;
end; //with
finally
form5.Free;
end; //try
end;
← →
Marina_S (2003-05-21 12:47) [15]Вот все, что касается пятой формы....
procedure TForm1.N3Click(Sender: TObject);
begin
form5:=TForm5.create(application);
end;
procedure TForm5.FormCreate(Sender: TObject);
begin
form1.visible:=false;
n:=0;
form5.test;
end;
procedure TForm5.Test;
var text:array[0..25] of char;
ptext:PChar;
a,b,i:integer;
begin
inc(n);
for i:=0 to 10 do
text[i]:=" ";
i:=0;
case n of
1: text[1+i]:="1";
2: text[1+i]:="2";
3: text[1+i]:="3";
4: text[1+i]:="4";
5: text[1+i]:="5";
end;
ptext:=text;
form5.label2.Caption:=StrPas(ptext);
end;
procedure TForm5.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
Action:=caFree;
Form1.Visible:=true;
end;
← →
DesWind (2003-05-21 12:48) [16]Тогда надо смотреть как создаеться LabelN;
← →
Verg (2003-05-21 12:53) [17]
> inc(n);
> for i:=0 to 10 do
> text[i]:=" "; text[i]:=#0;
> i:=0;
> case n of
> 1: text[1+i]:="1";
> 2: text[1+i]:="2";
> 3: text[1+i]:="3";
> 4: text[1+i]:="4";
> 5: text[1+i]:="5";
> end;
← →
DesWind (2003-05-21 12:54) [18]Здесь бы я посоветовал написать так:
procedure TForm1.N3Click(Sender: TObject);
begin
if form5<>nil then
Application.CreateForm(TForm5,form5);
form5.Show;{form5.ShowModal}
end;
А что такое StrPas?
← →
Skier (2003-05-21 12:57) [19]>Marina_S (21.05.03 12:47)
1)
procedure TForm1.N3Click(Sender: TObject);
begin
if form5 = nil then form5 := TForm5.create(application);
end;
procedure TForm5.FormCreate(Sender: TObject);
begin
form1.visible:=false;
n:=0;
form5.test;
end;
procedure TForm5.Test;
begin
form5.label2.Caption:= "Hello, world !";
end;
procedure TForm5.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
Action:=caFree;
form5 := nil;
Form1.Visible:=true;
end;
2)Зачем использовать array[0..25] of char и PChar ?
String не подойдёт ?
← →
DesWind (2003-05-21 12:57) [20]А вот это перенести в FormShow.
procedure TForm5.FormCreate(Sender: TObject);
begin
form1.visible:=false;
n:=0;
form5.test;
end;
← →
Marina_S (2003-05-21 13:03) [21]Не помогает :( Но там явно проблемы с формой.
← →
Hint (2003-05-21 13:15) [22]Замените
Form5.Label2.Caption:=StrPas(pText)
на
Label2.Caption:=StrPas(pText);
← →
Marina_S (2003-05-21 13:22) [23]Это я уже тоже пробовала - не помогает... :(
Вообще, очень интересная ситуация получается:
После командной строки form5:=TForm5.create(application);
form5=nil....(в Watch"е). Я уже ничего не понимаю...:((((
← →
Hint (2003-05-21 13:25) [24]А Form1 невидимой становится, событие Form5.OnCreate возникает?
← →
Skier (2003-05-21 13:29) [25]>Marina_S (21.05.03 13:22)
procedure TForm1.N3Click(Sender: TObject);
var
form5 : TForm5;
begin
Visible:=False;
form5 := TForm5.create(Application);
try
with form5 do begin
Test;
ShowModal;
end; //with
finally
form5.Free;
Visible:=true;
end; //try
end;
procedure TForm5.FormCreate(Sender: TObject);
begin
n:=0;
end;
procedure TForm5.Test;
begin
label2.Caption:= "Hello, world !";
end;
procedure TForm5.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
//убрать...
end;
← →
Mike Kouzmine (2003-05-21 13:32) [26]см Verg © (21.05.03 12:53)
← →
Marina_S (2003-05-21 13:45) [27]Да событие OnCreate возникало. Сейчас попробовала вместо form5 := TForm5.create(Application); написать Application.CreateForm(TForm5, Form5); и все стало работать :)
Честно говоря, я до сих пор не понимаю, в чем же была проблема
(т.е. в чем разница между этими командами)...
Всем большое спасибо!
← →
Anatoly Podgoretsky (2003-05-21 16:57) [28]У тебя вероятно две переменные Form5
← →
pasha_golub (2003-05-21 17:27) [29]По поводу создания форм еще в книге Фаронова написано, что предпочтительней использовать Application.CreateForm, но если честно, это первый раз, когда эта мысль подтвердилась...
← →
Vorobyev Sergey (2003-05-21 17:55) [30]
> У тебя вероятно две переменные Form5
Верно..
У меня такое было..
В myproject.dpr Delphi автоматически прописывает
Application.CreateForm(TForm1, Form1);
Я про это забыл и сам создавал
Form1 := TForm1.Create(Application);
Потом это приводило ко многим проблемам.. :(
>Marina_S
Проверь..
← →
AbrosimovA (2003-05-23 12:38) [31]
begin
try
Form1 := TForm1.Create(Application);
Form1.Visible:=false;
finally
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end;
end.
Я делал так и никаких проблем не было.
← →
Skier (2003-05-23 12:49) [32]>pasha_golub © (21.05.03 17:27)
> По поводу создания форм еще в книге Фаронова написано, что
> предпочтительней использовать Application.CreateForm
Это почему ? Цитату можно...
← →
KSergey (2003-05-23 14:17) [33]присоединяюсь к Skier © (23.05.03 12:49)
Хотя бось, что обоснований в книге нет...
← →
Skier (2003-05-23 14:29) [34]>KSergey © (23.05.03 14:17)
Я поэтому и спрашиваю, что тоже боюсь что "обоснований в книге нет..."
Страницы: 1 вся ветка
Текущий архив: 2003.06.05;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.011 c