![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Пишу программу для последнего звонка в школе. Фотоальбом и так далее
Вроде все отлично работает, но есть такая тема: Иногда программа вылетает с сообщением Exception тырым пырым - Stack overflow, иногда (раз на раз не приходится). У меня, как у олимпиадного программиста-математика, это ассоциируется или с утонувшей на глубину рекурсией или с Memory Limit'ом. А вот в визуальном программировании не могу понять почему так. Рекурсивных процедур нету. Кому не лень, посмотрите: http://files.gw.kz/y7retrcdyj.html Для упрощенного понимания, архитектура папок: Photos - Фотоальбомы по папкам PhotosTB - Уменьшенные эскизы фотографий PhotosInfo - Описание и обложки альбомов HTML - Пожелания учеников и информация о них Videos - Слова автора и вступительный ролик Unit, в котором происходит Exception (форма просмотра фотоальбомов): Код:
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, sSkinProvider, ExtCtrls, jpeg, ComCtrls, sListView, sPanel, StdCtrls, sButton, sScrollBar, sLabel, sEdit, sMemo, Buttons, sSpeedButton; type TfrmAlbom = class(TForm) sSkinProvider1: TsSkinProvider; sPanel1: TsPanel; photo1: TImage; photo2: TImage; photo3: TImage; photo4: TImage; photo5: TImage; sScrollBar1: TsScrollBar; photos: TListBox; big: TImage; sPath: TsEdit; sButton1: TsButton; sCur: TsEdit; SpeedButton1: TSpeedButton; procedure sScrollBar1Change(Sender: TObject); procedure photo1Click(Sender: TObject); procedure photo2Click(Sender: TObject); procedure photo3Click(Sender: TObject); procedure photo5Click(Sender: TObject); procedure photo4Click(Sender: TObject); procedure sButton1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); private { Private declarations } public end; var frmAlbom: TfrmAlbom; path : string; implementation uses Unit1; {$R *.dfm} procedure ScanDir(StartDir, Mask: String; List: TStrings); var SearchRec: TSearchRec; begin List.Clear; if Mask = '' then Mask:= '*.*'; if StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\'; if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then begin repeat Application.ProcessMessages; if (SearchRec.Attr and faDirectory) <> faDirectory then List.Add(Copy(SearchRec.Name,1,length(SearchRec.Name)-4)) else if (SearchRec.Attr and faDirectory) <> 0 then begin end; until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; end; procedure Delay(ms : longint); var TheTime : LongInt; begin TheTime := GetTickCount + ms; while GetTickCount < TheTime do Application.ProcessMessages; end; procedure Draw; var pp:string; op:longint; begin pp:=path; op:=pos('\Photos\',pp); delete(pp,op,8); insert('\PhotosTB\',pp,op); frmAlbom.photo1.Picture.LoadFromFile(pp+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position-1]+'.jpg'); frmAlbom.photo2.Picture.LoadFromFile(pp+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position]+'.jpg'); frmAlbom.photo3.Picture.LoadFromFile(pp+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+1]+'.jpg'); frmAlbom.photo4.Picture.LoadFromFile(pp+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+2]+'.jpg'); frmAlbom.photo5.Picture.LoadFromFile(pp+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+3]+'.jpg'); end; procedure TfrmAlbom.sScrollBar1Change(Sender: TObject); begin Draw; end; procedure TfrmAlbom.photo1Click(Sender: TObject); begin Self.big.Picture.LoadFromFile(Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position-1]+'.jpg'); sCur.Text := Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position-1]+'.jpg'; end; procedure TfrmAlbom.photo2Click(Sender: TObject); begin Self.big.Picture.LoadFromFile(Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position]+'.jpg'); sCur.Text := Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position]+'.jpg'; end; procedure TfrmAlbom.photo3Click(Sender: TObject); begin Self.big.Picture.LoadFromFile(Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+1]+'.jpg'); sCur.Text := Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+1]+'.jpg'; end; procedure TfrmAlbom.photo5Click(Sender: TObject); begin Self.big.Picture.LoadFromFile(Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+3]+'.jpg'); sCur.Text := Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+2]+'.jpg'; end; procedure TfrmAlbom.photo4Click(Sender: TObject); begin Self.big.Picture.LoadFromFile(Path+'\'+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+2]+'.jpg'); sCur.Text := Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position+3]+'.jpg'; end; procedure TfrmAlbom.sButton1Click(Sender: TObject); begin Self.Close; end; procedure TfrmAlbom.FormShow(Sender: TObject); begin Path := Self.sPath.Text; ScanDir(Path,'*.jpg',Self.photos.Items); Self.sScrollBar1.Max := Self.photos.Items.Count - 5; Self.sScrollBar1.Position := 1; Self.big.Picture.LoadFromFile(Path+frmAlbom.photos.Items[frmAlbom.sScrollBar1.position-1]+'.jpg'); Draw; end; procedure TfrmAlbom.SpeedButton1Click(Sender: TObject); begin winexec(PChar('explorer /select,'+self.sCur.Text),SW_Restore); end; end. P.S. У моего друга не выходит exception. Может, только у меня так? Посмотрите, пожалуйста |