Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.03.2011, 21:39
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию Помогите разобраться

Всем добрый вечер, я осваиваю книжку Ю.В. Ревича - "Нестандартные приемы программирования на 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  
Старый 01.03.2011, 22:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

За такой код руки надо отрывать.
Теперь по теме.
1. У Timer1 свойство Enabled в True стоит?
Ответить с цитированием
  #3  
Старый 01.03.2011, 22:29
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Да, true.
А насчет кода, видимо автор книги написал код таким громоздким по причине того что первая программа и все расписано довольно подробно)
Ответить с цитированием
  #4  
Старый 02.03.2011, 20:36
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Привел код в более читабельную форму. Пока что с программой не разобрался - не работает(

Код:
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  
Старый 02.03.2011, 21:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

переключение режима попало в блок 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  
Старый 03.03.2011, 21:13
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Сделал, ничего не изменилось, ладно буду разбираться, но и от помощи не откажусь
Ответить с цитированием
  #7  
Старый 03.03.2011, 22:13
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ммм... А у тебя файлы *.jpЕg? Или может все-таки *.jpg?
Если надо оба варианта обрабатывать, то маску надо покруче, типа "*.jp*g" или еще чего замутить.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 03.03.2011, 22:36
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

jpeg файлы, я пробую на стандартных картинках из моих рисунков)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter