![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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;Весь код жутко неоптимален. На кой бес для каждого радиобатона вы свой обработчик пишете? У вас одного общего хватит. Можно еще долго продолжать. Ошибок и недоработак - тьма. |