|
#1
|
|||
|
|||
delphi ошибка
Добрый день!
Помогите пожалуйста, немогу исправить ошибку в программе. Вообщем у меня есть 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 и теперь нет проблем)
|