Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизCreate form Найти похожие ветки
← →
anod (2004-02-15 00:43) [0]В факе посмотрел, как чделать заставку для программы, так вот на этом спотыкается...
...
implementation
...
uses logo;
..
Form2:=TForm2.Create(nil);
В project.dpr
logo in "logo.pas" {Form2};
Что ему не нравиться?
← →
Defunct (2004-02-15 01:13) [1]В приведенном коде все в порядке.
> В факе посмотрел, как чделать заставку для программы
Делай по FAQу, видно что-то не учел.
А что представляет собой TForm2? Если это заставка, там наверное есть таймер, может этот таймер что-то дергает раньше времени.
Имеется ли в DPR строка:
Application.CreateForm(TForm1, Form1);?
Да и было бы неплохо указать какая ошибка появляется, а то так ничего сказать нельзя.
← →
Defunct (2004-02-15 01:14) [2]Defunct (15.02.04 01:13) [1]
>Application.CreateForm(TForm1, Form1);?
читать
Application.CreateForm(TForm2, Form2);?
← →
anod (2004-02-15 01:23) [3]
> А что представляет собой TForm2? Если это заставка, там
> наверное есть таймер, может этот таймер что-то дергает раньше
> времени.
> Имеется ли в DPR строка:
> Application.CreateForm(TForm1, Form1);?
TForm2 -
FormCreate:
const
PBM_SETBARCOLOR = WM_USER+9;
begin
SendMessage(ProgressBar1.Handle,PBM_SETBARCOLOR,0,RGB(111,180,56));
Form2.Width:=Image1.Width;
Form2.Height:=Image1.Height;
end;
B все....
>Application.CreateForm(TForm2, Form2);
Зачем эта строка, если я хочу динамически форму создать???
Но добавление её ничего не правит...
Ошибка: Access violation at address .. in module Project1.exe
Испарвление Form2:=TForm2.Create(nil); на Application.CreateForm(TForm2, Form2);
Вроде испарвило все, но не понятно почему вообще была ошибка...
← →
Юрий Зотов (2004-02-15 02:08) [4]> Form2.Width:=Image1.Width;
> Form2.Height:=Image1.Height;
Зачем в методе класса использовать глобальную ссылку на его же собственный экземпляр? Вот так и нарываются на Access Violation. Уберите Form2 совсем.
← →
anod (2004-02-15 02:37) [5]Чтобы понятнее было...
Спасибо, помогло.... А почему в методе класса использовать глобальную ссылку на его же собственный экземпляр ошибка?
А что можно использовать вместо, sender?
← →
Defunct (2004-02-15 02:59) [6]anod © (15.02.04 02:37) [5]
> А почему в методе класса использовать глобальную ссылку на его же собственный экземпляр ошибка?
anod © (15.02.04 01:23) [3]
FormCreate:
Потому что собственный экземпляр еще не существует на момент вызова конструктора.
← →
Юрий Зотов (2004-02-15 03:00) [7]> anod © (15.02.04 02:37) [5]
> почему в методе класса использовать глобальную ссылку на его
> же собственный экземпляр ошибка?
Это может быть ошибкой, а может и нет. Просто при использовании сылок надо быть аккуратным, а глобальных - вдвойне.
Пример - создаю 2 экземпляра одного класса (глобальная ссылка указывает на последний). Убиваю его (глобальная ссылка указывает в никуда). Первый экземпляр вызывает какой-то свой метод, где использована эта глобальная ссылка - и здравствуй, Access Violation.
Вообще, старайтесь всячески избегать глобальных ссылок - это очень распространенный источник ошибок.
> А что можно использовать вместо, sender?
Ничего не нужно. По умолчанию используется Self.
← →
Defunct (2004-02-15 03:05) [8]Давайте напишем в такой форме и все будет понятно:
P:Pointer;
Form2 : TForm2;
Begin
..
P := TForm2.Create(Nil); // Тут Form2 = nil
Form2 := P; // Тут P указывает на экземпляр TForm2
.. // Тут Form2 указывает на экземпляр TForm2
End;
Начинает выполняться конструктор, он вызывает FormCreate, после завершения, возвращает ссылку на созданный экземпляр. И только после этого можно использовать экземпляр.
← →
anod (2004-02-15 03:16) [9]Спасибо, значит Self.
← →
Alexander666 (2004-02-15 11:09) [10]А какая такая заставка? При запуске приложения что ли?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c