|  | 
 
 | 
| 
			 
			#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 и теперь нет проблем) |