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