Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-93912
demoncom
2004-02-15 15:30
2004.02.29
Преобразование даты


1-93931
Артем К.
2004-02-15 06:28
2004.02.29
как узнать имя формы, на которую помещен компонент


1-93836
RUS
2004-02-16 10:23
2004.02.29
Таблица с полем в виде memo


1-93954
KOt
2004-02-17 17:09
2004.02.29
Отладка


3-93774
EugenePichugin
2004-02-03 18:11
2004.02.29
Вызов хранимой процедуры Oracle из Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский