![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 есть 2 radionbutton под каждой задана папка, в них находятся картинки "Название у всех разные и изменить нельзя". При выборе одно из radionbutton показывать по очереди в image. ну если не трудно при нажатии кнопки button их перелистывать на следующую но потом продолжать цикл  
		
	
		
		
		
		
		
	
		
		
	
	
	![]()  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Если это картинки в формате BMP или JPG, то ничего особо сложного. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Получаете список файлов по пути и файловой маске с помощью функций FindFirst, FindNext. Ну а дальше по нажатию на кнопку двигаетесь по этому списку, загружая картинку в TImage. Начните, если что-то не получится, задавайте конкретный вопрос.  | 
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
 
dencikkk (02.11.2019)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	procedure TForm1.BitBtn2Click(Sender: TObject);
var
  fs: TSearchRec;
begin
if FindFirst(Form2.kat1.Text+'*.*', faAnyFile, fs)=0 then
   repeat
      Image1.Picture.LoadFromFile(fs.Name);
      Label6.Caption :=(fs.Name);
   until FindNext(fs)<>0;
   FindClose(fs);
end;Последний раз редактировалось Admin, 25.12.2009 в 10:16.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Вот получилось так, на сколько я понял, но только имя отображает, а вот картинку чет не получается отобразить? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Еще такой вопрос: В данном случай он выдает имя только последнего измененного файла. Я бы хотел сделать что он выводил их по очереди при нажатии  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Так попробуйте: 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Код: 
	unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, JPEG;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Image1: TImage;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
   Files: Array of string;
   Index: Integer;
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
 fs: TSearchRec;
 x: string;
begin
 x:= Edit1.Text+'*.*' ;
 SetLength(Files, 0);
 Index := -1;
 if FindFirst(x, faAnyFile, fs) = 0
 then repeat
      if (ExtractFileExt(fs.Name) = '.bmp') or (ExtractFileExt(fs.Name) = '.jpg')
      then begin
           SetLength(Files, Length(Files)+1);
           Files[High(Files)] := Edit1.Text + fs.Name;
           end;
      until FindNext(fs)<>0;
 FindClose(fs);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 Inc(Index);
 if Index > High(Files) then Index := 0;
 Image1.Picture.LoadFromFile(Files[Index]);
end;
end.Код: 
	object Form1: TForm1
  Left = 192
  Top = 114
  Width = 870
  Height = 640
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Image1: TImage
    Left = 8
    Top = 88
    Width = 105
    Height = 105
    Proportional = True
    Stretch = True
  end
  object Button1: TButton
    Left = 16
    Top = 56
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Edit1: TEdit
    Left = 16
    Top = 24
    Width = 289
    Height = 21
    TabOrder = 1
    Text = 'Edit1'
  end
  object Button2: TButton
    Left = 312
    Top = 24
    Width = 65
    Height = 25
    Caption = 'Button2'
    TabOrder = 2
    OnClick = Button2Click
  end
end | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо получилось  
		
	
		
		
		
		
		
	
		
		
	
	
	    ![]()  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Теперь такая проблема! если в папке нет картинок он выдает ошибку http://files.mail.ru/JB6OWC?t=1 и ругается на  
		
	
		
		
		
		
		
	
		
		
	
	
	Цитата: 
	
 Еще такой вопрос, у меня есть listbox в нем содержится путь к файлу. При выборе чтобы он показывал в image но при этом не оставалось предыдущая картинка и растянул или уменьшил ее по до краев image? Как ее отобразить я сделал вот только не могу подогнать  | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Для подгона изображения используйте свойство Proportional и Strech. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Количество картинок в каталоге можно узнать через Length(Files) Если результат равен 0 значит картинок нет и кнопку отвечающую за переход к следующей картинке можно заблокировать. Выглядит так: Код: 
	procedure TForm1.Button2Click(Sender: TObject);
var
 fs: TSearchRec;
 x: string;
begin
 x:= Edit1.Text+'*.*' ;
 SetLength(Files, 0);
 Index := -1;
 if FindFirst(x, faAnyFile, fs) = 0
 then repeat
      if (ExtractFileExt(fs.Name) = '.bmp') or (ExtractFileExt(fs.Name) = '.jpg')
      then begin
           SetLength(Files, Length(Files)+1);
           Files[High(Files)] := Edit1.Text + fs.Name;
           end;
      until FindNext(fs)<>0;
 FindClose(fs);
 Button1.Enabled := Length(Files) > 0;
end; | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Можешь посмотреть что там не так. Я уже все перепробовал не могу понять в чем ошибка наверняка какая нибудь фигня мелкая. Вкратце о программе: Мне нужно копировать ряд картинок из папки 1 в папку 2, но перед копирование нужно посмотреть какие картинки в папке. Интересуют только *.jpg   
		
	
		
		
			проблемы: 1. При ручном просмотре картинки через Listbox они не уменьшаются, 2. Если в папке нет картинок он выдает ошибку т.к. программа при запуске выполняет функцию отобразит картинку Цитата: 
	
 4. Если директория "Kat" задана не верно, нужно сделать Radiobutton неактивным, чтобы знать в чем проблема. 5. Копировать выбранную картинку из Listbox'a Возможно ли упростить код в каких нибудь местах, если не трудно. P.S. У меня просто времени в обрез мне целую неделю нужно работать с 9 утра до 10 вечера, не высыпаюсь.    А работы до кучи а программа даже недописанная до конца выручает,   а если она полностью заработает то еще и время на отдых будет   Я давненько не писал немного подзабыл даже элементарные вещи не замечаю, и все таки 4 года это время.Заранее огромное спасибо!!!  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Сейчас ругать вас буду. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	У вас отличный инструмент есть в руках - отладчик, а вы им наверное не пользуетесь. Буквально сразу вылезло: Код: 
	if FindFirst(Form2.kat1.Text+'\*.jpg', faAnyFile, fd)=0 then Ну и что будет если к 'C:\1\*.*' прибавить '\*.jpg' ? Правильно - ошибка. Далее. Я вам код писал в расчете на использование только динамического массива, а вы теперь добавили листбокс и продолжаете использовать динамический массив. Вывод - нерационально и бездумно скопировали. Далее: Код: 
	if (ExtractFileExt(fs.Name) = '.JPG') or (ExtractFileExt(fs.Name) = '.jpg') Следовательно надо делать иначе: Код: 
	if UpperCase(ExtractFileExt(fs.Name)) = '.JPG' Код: 
	procedure TForm1.RadioButton1Click(Sender: TObject);
var
  fs: TSearchRec;
begin
  Label1.Caption:='Выбран шаблон №1';
  Label2.Caption:=Form2.kat1.Text;
  Label4.Caption:=Form2.kat11.Text;
  Label1.Color:=clbtnface;
  Listbox1.Clear;
  if FindFirst(Form2.kat1.Text+'\*.jpg', faAnyFile, fs) = 0 
  then Repeat
         Listbox1.AddItem(Form2.kat1.Text+'\'+fd.Name, nil);
         until FindNext(fd)<>0;
  FindClose(fs);
  Button3.Enabled := not Listbox1.isEmpty;
end;Весь код жутко неоптимален. На кой бес для каждого радиобатона вы свой обработчик пишете? У вас одного общего хватит. Можно еще долго продолжать. Ошибок и недоработак - тьма.  |