![]() |
|
|
#1
|
|||
|
|||
|
Добрый день!
Помогите пожалуйста, немогу исправить ошибку в программе. Вообщем у меня есть splashscreen, который запускаеться и после него грузяться все формы, на форме splashscreen в компонент TImage загружена анимация, которая работает с помощью компонента GifImage. Так вот ошибка выскакивает такая: Цитата:
Splashscreen у меня Form6, а строчка показываеться на Form2. Вот код: Код:
procedure TReadThread.UpdateForm; begin if (Form2.edt1.text = 'cls') then Form2.edt2.Text:=''; Form2.edt1.Text:=''; OemToAnsiBuff(buf, buf, dummy); Form2.edt2.Text:=Form2.edt2.Text+Copy(buf, 1, dummy); with Form2.edt2 do begin SelLength := 0; SelStart := Length(Text); Perform(EM_SCROLLCARET,0,0); end; end; показывает на ету строчку Код:
with Form2.edt2 do begin Код:
if (Form2.edt1.text = 'cls') then Form2.edt2.Text:=''; Form2.edt1.Text:=''; OemToAnsiBuff(buf, buf, dummy); Form2.edt2.Text:=Form2.edt2.Text+Copy(buf, 1, dummy); Вообщем я думаю ошибка связана с буфером обмена, но как решить так и недодумался( может вы поможете И кстати, если удалить анимацию, программа запускаеться без ошибок. Такая ошибка происходит, только если загрузить анимацию в SplashScreen. В других формах работает нормально. |
|
#2
|
||||
|
||||
|
Возможно нужно поменять приоритет при создании Form6 и Form2. Идёт обращение к Form2.edt2, а его ещё похоже нету
|
|
#3
|
|||
|
|||
|
в том то и дело, что я не обращаюсь в Form2 до запуска Form1.
пробывал менять местами, тоже не помогло, незнаю что и делать уже |
|
#4
|
||||
|
||||
|
Откройте файл *.dpr на просмотр да и гляньте что и когда создется в CreateForm
|
|
#5
|
|||
|
|||
|
Код:
SplashScreen := TSplashScreen.Create(Application); SplashScreen.ClientHeight:=256; SplashScreen.ClientWidth:=520; SplashScreen.Height:=294; SplashScreen.Width:=536; SplashScreen.Show; SplashScreen.Update; Application.CreateForm(TForm1, Form1); SplashScreen.Update; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm4, Form4); если же зделать вот так: Код:
Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); SplashScreen := TSplashScreen.Create(Application); SplashScreen.ClientHeight:=256; SplashScreen.ClientWidth:=520; SplashScreen.Height:=294; SplashScreen.Width:=536; SplashScreen.Show; SplashScreen.Update; Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm4, Form4); ошибка по прежнему высвечуеться( |
|
#6
|
||||
|
||||
|
Анимацию в GifImage грузите из ресурсов? Кажется у него параметр Active используется, если его установить в false, а включать в OnShow, не поможет?
|
|
#7
|
|||
|
|||
|
Компонент GifImage позволяет компоненту TImage загружать .gif анимации и воиспроизводить их.
К сожалению, у меня нету параметра Active( |
|
#8
|
|||
|
|||
|
попробывал зделать так:
Код:
procedure TSplashScreen.FormCreate(Sender: TObject);
var nGif:TGIFImage;
begin
nGif:=TGIFImage.Create;
nGif.LoadFromFile('img\loader.gif');
nGif.Animate := false;
loader.Picture.Assign(nGif);
nGif.Free;
end;программа запускаеться без ошибок, но когда включаю анимацию Код:
procedure TSplashScreen.FormShow(Sender: TObject);
var nGif:TGIFImage;
begin
nGif:=TGIFImage.Create;
nGif.loadfromfile('img\loader.gif');
nGif.Animate := true;
loader.Picture.Assign(nGif);
nGif.Free;
end;программа снова выдает ту же ошибку Последний раз редактировалось JeReK5542, 22.02.2014 в 16:46. |
|
#9
|
||||
|
||||
|
И будет ошибка - вы создаёте TGIFImage, передаете его loader`у и тут же грохаете, сделайте nGif глобальным, в Oncreate формы его создавайте, а nGif.Free выполняйте в FormDestroy
З.Ы. Есть альтернатива для GIFImage, вот пример Последний раз редактировалось Alegun, 22.02.2014 в 17:33. |
|
#10
|
|||
|
|||
|
спасибо работает)
подскажите еще, как зделать, чтобы SplashScreen не тормозил при загрузке? |
|
#11
|
|||
|
|||
|
кстати проблему решил так:
Код:
procedure TSplashScreen.FormCreate(Sender: TObject); begin nGif:=TGIFImage.Create; nGif.Assign(loader.Picture); nGif.Animate :=False; loader.Picture.Assign(nGif); end; procedure TSplashScreen.FormDestroy(Sender: TObject); begin nGif.Free; end; procedure TSplashScreen.FormShow(Sender: TObject); begin nGif.Animate:=True; end; в loader изначально загружена анимация, все работает отлично) Последний раз редактировалось JeReK5542, 22.02.2014 в 18:09. |
|
#12
|
|||
|
|||
|
блин всетаки осталась проблема(
с етим кодом что выше все работает, но анимация не двигаеться вообще даже если использовать Application.ProcessMessages |
|
#13
|
|||
|
|||
|
а если сделать так:
Код:
procedure TSplashScreen.FormCreate(Sender: TObject);
begin
nGif:=TGIFImage.Create;
nGif.LoadFromFile('img\loader.gif');
nGif.Animate:=False;
loader.Picture.Assign(nGif);
end;
procedure TSplashScreen.FormDestroy(Sender: TObject);
begin
nGif.Free;
end;
procedure TSplashScreen.FormShow(Sender: TObject);
begin
nGif.Animate:=True;
loader.Picture.Assign(nGif);
end; |
|
#14
|
||||
|
||||
|
Нет, столько кофе не выпить, чтоб на гуще гадать, всё равно что слона с широко закрытыми глазами общупывать - то ли брандспойт, толи швартов, не поймёшь
Нужно ставить эксперимент, пробовать повторить ситуацию как у вас. Давно б уже показали весь юнит сплешскрина, как запускается и как грохается, правда, гадать надоело по крохам |
|
#15
|
|||
|
|||
|
поставил RxLib и теперь нет проблем)
|