Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2010, 15:01   #1
Eject971
 
Регистрация: 19.05.2010
Сообщений: 4
Вопрос Просмотрщик изображений

Делаю программку из книжки "Никита Культин :<основы программирования в turbo Delphi>"

Долго мучился, потому что не мог скомпилировать *.exe файл. Но теперь не могу понять чего же она не работает?! Выдаёт подобную ошибку (см.скриншот).


Вот сам код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls,
  FileCtrl,
  Jpeg;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    SpeedButton2: TSpeedButton;
    SpeedButton1: TSpeedButton;
    SpeedButton3: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    aPath: string; // каталог, который выбрал пользователь
    aSearchRec : TSearchRec; // информация о файле
    Pictures : TStringList;  // список иллюстраций
    n: integer; // номер иллюстрации, отображаемой в данный момет

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// конструктор формы
procedure TForm1.FormCreate(Sender: TObject);
begin
  Pictures := TStringList.Create;
  SpeedButton2.Enabled := False;
  SpeedButton3.Enabled := False;
end;

// щелчок на кнопке "Папка"
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  r: integer;
begin
  if SelectDirectory('Выберите каталог', '',aPath) then
  begin
    aPath := aPath + '\';
    Form1.Caption := 'Прсмотр иллюстраций - ' + aPath;

    // сформировать список иллюстраций
    r := FindFirst(aPath+'*.jpg',faAnyFile,aSearchRec);
    if r = 0 then
      begin
        // в указанном каталоге есть jpg-файл
        Pictures.Clear; // очистить список иллюстраций
        Pictures.Add(aSearchRec.Name); // добавить имя файла в список иллюстраций

      end;

    // получить имена остальных jpg-файлов
    repeat
      r := FindNext(aSearchRec); // получить имя следующего jpg-файла
      if r = 0 then
          Pictures.Add(aSearchRec.Name);
    until ( r <> 0);

    if Pictures.Count > 1 then
        SpeedButton2.Enabled := True;

    // отобразить иллюстрацию
     n := 0; // номер отображаемой иллюстрации
    try
       Form1.Image1.Picture.LoadFromFile(aPath + Pictures[n]);
       except on EInvalidGraphic do Form1.Image1.Picture.Graphic := nil;
    end;
    if Pictures.Count = 1 then
        SpeedButton2.Enabled := False;

  end;
end;

// вывод следующей картинки
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
   // вывести картинку
   n := n+1;
   try
       Form1.Image1.Picture.LoadFromFile(aPath + Pictures[n]);
       except on EInvalidGraphic do Form1.Image1.Picture.Graphic := nil;
   end;

   if n = Pictures.Count-1 then
      SpeedButton2.Enabled := False;

   // если кнопка "Предыдущая" не доступна,
   // сделать ее доступной
   if (n > 0 ) and SpeedButton3.Enabled = False then
        SpeedButton3.Enabled := True;

end;

// вывод предыдущей картинки
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
    // вывести картинку
   n := n-1;
   try
       Form1.Image1.Picture.LoadFromFile(aPath + Pictures[n]);
       except on EInvalidGraphic do Form1.Image1.Picture.Graphic := nil;
   end;

   if n = 0 then
      SpeedButton3.Enabled := False;

   // если кнопка "Следующая" не доступна,
   // сделать ее доступной
   if (n < Pictures.Count) and SpeedButton2.Enabled = False then
        SpeedButton2.Enabled := True;
end;

end.
Также прикладываю файл для загрузки того, что я начудил (извините, на кнопках нет подписей).
Прошу знающих людей помочь мне с этой программой, т.е. хочу получить в ответ уже рабочую ну и краткое объяснение почему она не работала. Заранее благодарен.
Вложения
Тип файла: rar Просмотр фото.rar (215.8 Кб, 19 просмотров)
Eject971 вне форума Ответить с цитированием
Старый 21.11.2010, 17:31   #2
Eject971
 
Регистрация: 19.05.2010
Сообщений: 4
По умолчанию

Ну не хотите помогать по данному проекту... и ладно. Помогите по схожему. Это тоже просмотрщик изображений...
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, FileCtrl, Buttons, ComCtrls, ShellCtrls, Jpeg;

type
  TForm1 = class(TForm)
    Image1: TImage;
    spPrev: TSpeedButton;
    spNext: TSpeedButton;
    ShellComboBox1: TShellComboBox;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    Panel1: TPanel;
    procedure ShellComboBox1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure spPrevClick(Sender: TObject);
    procedure spNextClick(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1     : TForm1;
  path      : String;
  Pictures  : TStringList;
  Number    : Integer;
implementation

{$R *.dfm}

procedure TForm1.ShellComboBox1Change(Sender: TObject);
var tsr : TSearchRec;
begin
  path := ShellComboBox1.Path;
  spPrev.Enabled := false;
  spNext.Enabled := true;
  Pictures.Clear;
  if (FindFirst(path+'\*.jpg', faAnyFile, tsr) = 0) then
    repeat
      Pictures.Add(path+'\'+tsr.Name);
    until (FindNext(tsr) <> 0);
  FindClose(tsr);
  Image1.Center := true;
  if Pictures.Count = 0 then begin
    Image1.Center := false;
    Image1.Canvas.Font.Name := 'Courier New';
    Image1.Canvas.Font.Size := 16;
    Image1.Canvas.TextOut(2,2,'Изображения отсутствуют');
    spPrev.Enabled := false;
    spNext.Enabled := false;
  end;
  Number := 0;
  if Pictures.Count > 0 then Image1.Picture.LoadFromFile(Pictures[0]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Pictures := TStringList.Create;
end;

procedure TForm1.spPrevClick(Sender: TObject);
begin
  if Number > 0 then dec(Number);
  spPrev.Enabled := true;
  spNext.Enabled := true;
  if Number = 0 then begin
  spPrev.Enabled := false;
  if Pictures.Count>1 then spNext.Enabled := true;
  end;
  Image1.Picture.LoadFromFile(Pictures[Number]);
end;

procedure TForm1.spNextClick(Sender: TObject);
begin
  spPrev.Enabled := true;
  spNext.Enabled := true;
  if Number < (Pictures.Count - 1) then inc(Number);
  if Number = (Pictures.Count - 1) then begin
  spNext.Enabled := false;
  if Pictures.Count>1 then spPrev.Enabled := true;
  end;
  Image1.Picture.LoadFromFile(Pictures[Number]);
end;


procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Image1.Stretch:=CheckBox1.Checked;
end;
end.
Программа работает, но хочется немного большего. Но не знаю, как мне организовать выбор каталога не через ShellComboBox, а допустим через ShellTreeView, чтобы выбор был более "качественным" ибо держать изображения в корне каталога не удобно.
Вложения
Тип файла: rar Просмотрщик фото.rar (299.1 Кб, 29 просмотров)

Последний раз редактировалось Eject971; 21.11.2010 в 17:32. Причина: Приложен файл
Eject971 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просмотрщик картинок VLGENERAL Мультимедиа в Delphi 15 06.01.2012 21:54
просмотрщик картинок (Image Viewer) >>arty<< Помощь студентам 1 16.04.2010 23:51
просмотрщик Яр|/||< (^_^) Свободное общение 3 19.09.2009 08:33
просмотрщик реестра Deceased Общие вопросы Delphi 27 02.04.2009 16:33
Просмотрщик интернет страниц BangBangFM Мультимедиа в Delphi 6 27.01.2009 08:25