|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите разобраться
Всем добрый вечер, я осваиваю книжку Ю.В. Ревича - "Нестандартные приемы программирования на Delphi", сделал один из первых примеров, программа должна выполнять следующую функцию:
Заходим нажимаем в меню - Открыть. Открываем картинку jpeg, программа должна вывести эту картинку в окне Image и начать показывать слайдшоу всех картинок, находящихся в папке, с первой открытой картинкой, так же при остановке слайд шоу, можно просто листать эти картинки, нажимаю на кнопку. Я написал программный код точно как в книжке дано, но программа почему то только открывает первую выбранную мной картинку, но не запускает слайдшоу и при нажатии на кнопку перелистывания картинок,тоже ничего не происходит (видимо программа не понимает, что ей необходимо открывать все картинки из папки). Помогите пожалуйста разобраться что не так. Вот код программы. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls, Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; OpenDialog1: TOpenDialog; Timer1: TTimer; Button1: TButton; Panel1: TPanel; Image1: TImage; File1: TMenuItem; Show1: TMenuItem; Open1: TMenuItem; Run1: TMenuItem; procedure Open1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Run1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; n:integer=0; srf:TSearchRec; st:string; implementation {$R *.dfm} procedure Loadfile;{Процедура поиска и загрузки файлов JPEG} begin if n=0 then {Если это первая загрузка} begin if FindFirst ('*.jpeg',faAnyFile,srf)<>0 then exit; {Ищем самый первый JPEG-файл в папке, если не находим выход из процедуры} try{Пробуем его загрузить в Image1} Form1.Image1.Picture.LoadFromFile(srf.Name); except {Это вовсе не JPEG} {Выводим сообщение} st:='Неправильный формат файла'+srf.Name; Application.MessageBox(Pchar(st),'Error',MB_OK); exit{Выход из процедуры} end; n:=1;{Следующая загрузка будет уже не первой} end else {Если эта загрузка уже не первая} begin if FindNext(srf)=0 then {Если =0, то найден следующий файл} try {Пробуем его загрузить в Image1} Form1.Image1.Picture.LoadFromFile(srf.Name) except {Это вовсе не JPEG} {Выводим сообщение} st:='Неправильный формат файла'+srf.Name; Application.MessageBox(Pchar(st),'Error',MB_OK); exit{Выход из процедуры} end else {А если не 0 - значит файлов больше нет} begin FindClose(srf); {Закрываем поиск} n:=0;{В следующий раз начнем сначала} end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Loadfile; end; procedure TForm1.Run1Click(Sender: TObject); {Запуск и остановка демонстрации слайдов} begin if Timer1.Enabled=False then {Если демонстрация была остановлена} begin Run1.Caption:='Стоп'; {Меняем название пункта меню на СТОП} Timer1.Enabled:=True; {Запустили таймер} end else {Иначе,если демонстрация уже идет} begin Run1.Caption:='Запуск'; {Меняем название пункта меню обратно на ЗАПУСК} Timer1.Enabled:=False; {Таймер остановлен} end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Loadfile; end; procedure TForm1.Open1Click(Sender: TObject); begin if OpenDialog1.Execute then {Если диалог открытия файла завершился удачно} Image1.Picture.LoadFromFile(OpenDialog1.FileName) {Загружаем картинку в Image1} else begin {Иначе,если диалог завершился неудачно, выводим сообщение} st:='Неправильный формат файла'+OpenDialog1.FileName; Application.MessageBox(Pchar(st),'Error',MB_OK); exit;{Выходим из процедуры} end; n:=0;{n=0 - признак первой закрузки из данной папки} end; end. |
#2
|
|||
|
|||
За такой код руки надо отрывать.
Теперь по теме. 1. У Timer1 свойство Enabled в True стоит? |
#3
|
|||
|
|||
Да, true.
А насчет кода, видимо автор книги написал код таким громоздким по причине того что первая программа и все расписано довольно подробно) |
#4
|
|||
|
|||
Привел код в более читабельную форму. Пока что с программой не разобрался - не работает(
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls, Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; OpenDialog1: TOpenDialog; Timer1: TTimer; Button1: TButton; Panel1: TPanel; Image1: TImage; File1: TMenuItem; Show1: TMenuItem; Open1: TMenuItem; Run1: TMenuItem; procedure Open1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Run1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; n:integer=0; srf:TSearchRec; st:string; implementation {$R *.dfm} procedure Loadfile;{Процедура поиска и загрузки файлов JPEG} begin if n=0 then {Если это первая загрузка} begin if FindFirst ('*.jpeg',faAnyFile,srf)<>0 then exit; {Ищем самый первый JPEG-файл в папке, если не находим выход из процедуры} try{Пробуем его загрузить в Image1} Form1.Image1.Picture.LoadFromFile(srf.Name); except {Это вовсе не JPEG} {Выводим сообщение} st:='Неправильный формат файла'+srf.Name; Application.MessageBox(Pchar(st),'Error',MB_OK); exit{Выход из процедуры} end; n:=1;{Следующая загрузка будет уже не первой} end else {Если эта загрузка уже не первая} begin if FindNext(srf)=0 then {Если =0, то найден следующий файл} try {Пробуем его загрузить в Image1} Form1.Image1.Picture.LoadFromFile(srf.Name) except {Это вовсе не JPEG} {Выводим сообщение} st:='Неправильный формат файла'+srf.Name; Application.MessageBox(Pchar(st),'Error',MB_OK); exit{Выход из процедуры} end else {А если не 0 - значит файлов больше нет} begin FindClose(srf); {Закрываем поиск} n:=0;{В следующий раз начнем сначала} end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Loadfile; end; procedure TForm1.Run1Click(Sender: TObject); {Запуск и остановка демонстрации слайдов} begin if Timer1.Enabled=False then {Если демонстрация была остановлена} begin Run1.Caption:='Стоп'; {Меняем название пункта меню на СТОП} Timer1.Enabled:=True; {Запустили таймер} end else {Иначе,если демонстрация уже идет} begin Run1.Caption:='Запуск'; {Меняем название пункта меню обратно на ЗАПУСК} Timer1.Enabled:=False; {Таймер остановлен} end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Loadfile; end; procedure TForm1.Open1Click(Sender: TObject); begin if OpenDialog1.Execute then {Если диалог открытия файла завершился удачно} Image1.Picture.LoadFromFile(OpenDialog1.FileName) {Загружаем картинку в Image1} else begin {Иначе,если диалог завершился неудачно, выводим сообщение} st:='Неправильный формат файла'+OpenDialog1.FileName; Application.MessageBox(Pchar(st),'Error',MB_OK); exit;{Выходим из процедуры} end; n:=0;{n=0 - признак первой закрузки из данной папки} end; end. |
#5
|
|||
|
|||
переключение режима попало в блок try..except.
Мне кажется, что должно быть как-то так: Код:
procedure Loadfile;{Процедура поиска и загрузки файлов JPEG} begin if n=0 then {Если это первая загрузка} begin if FindFirst ('*.jpeg',faAnyFile,srf)<>0 then exit; n:=1;{Следующая загрузка будет уже не первой} {Ищем самый первый JPEG-файл в папке, если не находим выход из процедуры} try{Пробуем его загрузить в Image1} Form1.Image1.Picture.LoadFromFile(srf.Name); except {Это вовсе не JPEG} {Выводим сообщение} st:='Неправильный формат файла'+srf.Name; Application.MessageBox(Pchar(st),'Error',MB_OK); exit{Выход из процедуры} end; end else {Если эта загрузка уже не первая} begin if FindNext(srf)=0 then {Если =0, то найден следующий файл} try {Пробуем его загрузить в Image1} Form1.Image1.Picture.LoadFromFile(srf.Name) except {Это вовсе не JPEG} {Выводим сообщение} st:='Неправильный формат файла'+srf.Name; Application.MessageBox(Pchar(st),'Error',MB_OK); exit{Выход из процедуры} end else {А если не 0 - значит файлов больше нет} begin FindClose(srf); {Закрываем поиск} n:=0;{В следующий раз начнем сначала} end; end; end; |
#6
|
|||
|
|||
Сделал, ничего не изменилось, ладно буду разбираться, но и от помощи не откажусь
|
#7
|
||||
|
||||
Ммм... А у тебя файлы *.jpЕg? Или может все-таки *.jpg?
Если надо оба варианта обрабатывать, то маску надо покруче, типа "*.jp*g" или еще чего замутить. jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
|||
|
|||
jpeg файлы, я пробую на стандартных картинках из моих рисунков)
|