Контейнер для изображений (что-то типо галереи)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Контейнер для изображений (что-то типо галереи)

Сообщение ВизГ » 08.08.2014 09:55:59

Мне необходимо создать контейнер с изображениями (визуально что-то типо галереи, но подписи совсем не нужны, разве что Хинты). Ну так вот, у меня вопрос, что лучше для этого использовать. Вчера опробовал различные способы:
1) TDrawGrid, не совсем понял как сделать там все нормально, но похоже нужно постоянно отрисовывать картинки в ячейках
2) Элемент TPanel c динамическим созданием TImage (из-за не опытности возникает много вопросов, но думаю они все решаемы). Но самый главный вопрос, взаимодействие с этими TImage так, чтобы можно было переносить один из TImage в другой контейнер (с убиранием его из первого контейнера, возможно самым простым будет скрытие TImage через свойство Visible). Ну и еще один вопрос, как сделать массив их этих TImage, чтобы можно было легче с ними работать (ну или как-нибудь по другому им задать индекс).

Я не прошу написать за меня код, я просто хочу чтобы меня подтолкнули к правильной мысли, с кодом, надеюсь, справлюсь. Ну если что и пойдет не так, попрошу помощи))
ВизГ
незнакомец
 
Сообщения: 7
Зарегистрирован: 06.08.2014 11:56:34

Re: Контейнер для изображений (что-то типо галереи)

Сообщение alexs » 08.08.2014 10:49:07

Если 2-й метод - то доступ можно через свойство Panel.Controls - это и есть массив всех компонентов, которые находятся на панеле.
По первому методу - надо добавлять событие на отрисовку изображения в ячейке - тоже не сложно.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Контейнер для изображений (что-то типо галереи)

Сообщение ВизГ » 14.08.2014 12:11:31

В общем, контейнер получился, но какая-то ошибка с присвоением обработчика на OnClick:
Вот код
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Buttons, Unit3;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Frame1_1: TFrame1;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure ImClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }

  end;

var
  Form1: TForm1;
  Arr: array of TImage;

implementation

{$R *.lfm}

{ TForm1 }
procedure TForm1.ImClick(Sender: TObject);
begin
     Label1.caption:=(Sender as TImage).Name;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,n,k:integer;
begin
  n:=StrtoInt(Edit1.Text);
  SetLength(Arr,n);
  for i:=0 to n-1 do
      begin
        Arr[i]:=TImage.Create(Frame1_1);
        Arr[i].Parent:=Frame1_1;
        Arr[i].Top:=Trunc(i/4)*64;
        Arr[i].Left:=(i mod 4)*64;
        Arr[i].Picture.LoadFromFile('D:\Desktop\ProARA\Tal_img\1.png');
        Arr[i].OnClick:=ImClick;
      end;

end;

end.

ругается на сточку: Arr[i].OnClick:=ImClick;
Пишет: unit1.pas(57,32) Error: Wrong number of parameters specified for call to "ImClick".
Я не могу понять на какое количество параметров он ругается, ведь у процедуры один параметр - выбранный объект

Извиняюсь, ответ уже нашел. Не внимательно искал первый раз.
Вызов процедуры осуществляется через знак @: Arr[i].OnClick:=@ImClick;
ВизГ
незнакомец
 
Сообщения: 7
Зарегистрирован: 06.08.2014 11:56:34

Re: Контейнер для изображений (что-то типо галереи)

Сообщение Sharfik » 14.08.2014 23:34:56

ВизГ писал(а):Извиняюсь, ответ уже нашел. Не внимательно искал первый раз.
Вызов процедуры осуществляется через знак @: Arr[i].OnClick:=@ImClick;

если {$mode objfpc}{$H+} то через собаку, если {$mode delphi}{$H+} то без нее можно.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Контейнер для изображений (что-то типо галереи)

Сообщение ВизГ » 15.08.2014 10:29:04

Sharfik писал(а):если {$mode objfpc}{$H+} то через собаку, если {$mode delphi}{$H+} то без нее можно.

А если делать через 2е кроссплатформенность сохранится?
ВизГ
незнакомец
 
Сообщения: 7
Зарегистрирован: 06.08.2014 11:56:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 226

Рейтинг@Mail.ru