Главная страница
    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.46 MB
Время: 0.009 c
1-93894
Andy BitOff
2004-02-16 02:18
2004.02.29
Вопрос знатокам, по поводу TStringList


1-94003
Альф
2004-02-16 16:25
2004.02.29
Про подсветку синтаксиса в Memo...


1-93895
Anton
2004-02-15 11:56
2004.02.29
Как изменить элемент массива?


1-94021
i-s-v
2004-02-16 22:37
2004.02.29
Как сделать, чтобы при изменении размеров отрисовывалася рамка


1-93913
OlimPer
2004-02-18 15:38
2004.02.29
копирование!!!!!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский