Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TPanel + TImage массив / 25 сообщений из 26, страница 1 из 2
21.12.2017, 07:52
    #39573230
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Доброе время суток!
Помогите люди добрые! Динамический пытаюсь создать TPanel, а на TPanel создать TImage, но что-то не так, в чем проблема?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
procedure TForm1.Button2Click(Sender: TObject);
var
  x,y : integer;
  PanelArray: Array[1..5,1..5] of TPanel;

  i,j: Integer;
  ImgArray: Array[1..5,1..5] of TImage;

begin
  for y:=1 to 5 do begin
    for x := 1 to 5 do begin
      for i := 1 to 5 do begin
        for j := 1 to 5 do begin

          PanelArray[x,y]:=TPanel.Create(Self);
          PanelArray[x,y].Parent:= Self;
          PanelArray[x,y].Color:=clBtnFace;
          PanelArray[x,y].BevelInner:=bvNone;
          PanelArray[x,y].BevelKind:=bkNone;
          PanelArray[x,y].BevelOuter:=bvRaised;
          PanelArray[x,y].Left := x*100;
          PanelArray[x,y].Top := y*100;
          PanelArray[x,y].width:=90;
          PanelArray[x,y].height:=90;

          ImgArray[i,j] := TImage.Create(PanelArray[x,y]);
          ImgArray[i,j].Parent := PanelArray[x,y];
          ImgArray[i,j].Left := i*50;
          ImgArray[i,j].Top := j*50;
          ImgArray[i,j].Width := 50;
          ImgArray[i,j].Height := 50;
          ImgArray[i,j].Picture.LoadFromFile(IntToStr(i)+'.bmp');
        end;
      end;
    end;
  end;

end;
...
Рейтинг: 0 / 0
21.12.2017, 07:55
    #39573233
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
ЧЕТЫРЕ вложенных цикла, ЖЕСТЬ
...
Рейтинг: 0 / 0
21.12.2017, 10:05
    #39573310
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Для начала не так то, что в элемент массива "PanelArray[x,y]" засовывается ДВАДЦАТЬ ПЯТЬ новых панелей и угадайте, куда деваются первые двадцать четыре?..
...
Рейтинг: 0 / 0
21.12.2017, 10:57
    #39573345
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
А потом добавятся ещё пара циклов и у винды кончатся хэндлы...
...
Рейтинг: 0 / 0
21.12.2017, 11:11
    #39573354
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
white_niggerА потом добавятся ещё пара циклов и у винды кончатся хэндлы...

😂😂😂👍👍👍
Не подскажете как правильно оформить код?!)))
...
Рейтинг: 0 / 0
21.12.2017, 12:43
    #39573468
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Без постановки задачи правильно оформить код неполучится
...
Рейтинг: 0 / 0
21.12.2017, 12:46
    #39573473
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
DimaBrБез постановки задачи правильно оформить код неполучится

Щас я почти уже разобрался, позже выложу
...
Рейтинг: 0 / 0
21.12.2017, 12:48
    #39573477
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
AskatDimaBrБез постановки задачи правильно оформить код неполучится

Щас я почти уже разобрался, позже выложу

подожди до пятницы
...
Рейтинг: 0 / 0
21.12.2017, 12:56
    #39573494
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Tactical Nuclear PenguinAskatпропущено...


Щас я почти уже разобрался, позже выложу

подожди до пятницы

Можете подсказать, как сравнить картинки внутри панели?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
procedure TForm1.FormCreate(Sender: TObject);
var
  X, Y: Integer;
  PanelArray: Array [1 .. 5, 1 .. 5] of TPanel;
  ImgArray: Array [1 .. 5, 1 .. 5] of TImage;
begin
  for Y := 1 to 5 do  begin
    for X := 1 to 5 do  begin

      PanelArray[X, Y] := TPanel.Create(Self);
      PanelArray[X, Y].Parent := Self;
      PanelArray[X, Y].Color := clBtnFace;
      PanelArray[X, Y].BevelInner := bvNone;
      PanelArray[X, Y].BevelKind := bkNone;
      PanelArray[X, Y].BevelOuter := bvRaised;
      PanelArray[X, Y].Left := X * 155;
      PanelArray[X, Y].Top := Y * 155;
      PanelArray[X, Y].Width := 150;
      PanelArray[X, Y].Height := 150;

      ImgArray[X, Y] := TImage.Create(PanelArray[X, Y]);
      ImgArray[X, Y].Parent := PanelArray[X, Y];
      ImgArray[X, Y].Left := x * 7;
      ImgArray[X, Y].Top := y * 3;
      ImgArray[X, Y].Width := 120;
      ImgArray[X, Y].Height := 120;
      ImgArray[X, Y].Picture.LoadFromFile(IntToStr(x) + '.bmp');
      ImgArray[X, Y].Stretch := True;

    end;
  end;

end;
...
Рейтинг: 0 / 0
21.12.2017, 18:38
    #39573965
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
AskatМожете подсказать, как сравнить картинки внутри панели?
Во-первых, "Динамически создать" - это не "сравнить картинки".
Если тебе нужно сравнивать два изображения - создай отдельный топик.
Во-вторых, это хорошо, что показываешь свой код, хоть и бесполезный,
но этого недостаточно - в первую очередь, нужно сформулировать саму
задачу, чётко и понятно - что надо и для чего.

http://citforum.ru/howto/smart-questions-ru.shtml#before
...
Рейтинг: 0 / 0
21.12.2017, 21:43
    #39574062
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Когда же мы увидим саму задачу ?
...
Рейтинг: 0 / 0
22.12.2017, 05:54
    #39574156
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
DimaBrКогда же мы увидим саму задачу ?

Задача: создать динамический панели и внутри каждой отобразить картинки. Вот и все.
...
Рейтинг: 0 / 0
22.12.2017, 08:57
    #39574187
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
AskatDimaBrКогда же мы увидим саму задачу ?

Задача: создать динамический панели и внутри каждой отобразить картинки. Вот и все.
А для чего вы сделали массивы двухмерными?
...
Рейтинг: 0 / 0
22.12.2017, 08:59
    #39574190
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Gerasimenko,

логично же почему - так проще на экране разместить панели в виде таблицы :) посмотри на присваивание значений .left и .top
...
Рейтинг: 0 / 0
22.12.2017, 09:13
    #39574198
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
asutp2Gerasimenko,

логично же почему - так проще на экране разместить панели в виде таблицы :) посмотри на присваивание значений .left и .top

Логика отсутствует полностью
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  recPnlImg = record
    pnlImg:TPanel;
    img:TImage;
  end;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    arRec:array[0..4] of recPnlImg;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 i:Integer;
begin
  for i:=0 to 4
   do begin
     arRec[i].pnlImg:=TPanel.Create(Form1);
     arRec[i].pnlImg.Parent:=Form1;
     arRec[i].pnlImg.Align:=alTop;

     arRec[i].img:=TImage.Create(Form1);
     arRec[i].img.Parent:=arRec[i].pnlImg;
     arRec[i].img.Align:=alLeft;
     arRec[i].img.Picture.LoadFromFile(...);
      end;
end;

end.

...
Рейтинг: 0 / 0
22.12.2017, 11:01
    #39574298
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
AskatDimaBrКогда же мы увидим саму задачу ?Задача: создать динамический панели и внутри каждой отобразить картинки. Вот и все.POS для общепита, не ? :)
...
Рейтинг: 0 / 0
22.12.2017, 13:51
    #39574434
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
как подгрузить из таблицы картинки? Картинки хранятся в виде файлов на локальном компьютере, а в таблице хранятся путь к картинкам?


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
procedure TForm1.FormCreate(Sender: TObject);
var
  X, Y, i: Integer;
  PanelArray: Array [1 .. 5, 1 .. 5] of TPanel;
  ImgArray: Array [1 .. 5, 1 .. 5] of TImage;
  ImgLink : string;
begin
  ADOQuery1.Close;
  ADOQuery1.Open;

    for Y := 1 to 5 do
      for X := 1 to 5 do
        begin

          while not ADOQuery1.Eof do
          begin

            PanelArray[X, Y] := TPanel.Create(Self);
            PanelArray[X, Y].Parent := Self;
            PanelArray[X, Y].Color := clBtnFace;
            PanelArray[X, Y].BevelInner := bvNone;
            PanelArray[X, Y].BevelKind := bkNone;
            PanelArray[X, Y].BevelOuter := bvRaised;
            PanelArray[X, Y].Left := X * 180 - 150;  // расстояние между панелями по горизонтали
            PanelArray[X, Y].Top := Y * 180 - 150;  // расстояние между панелями по вертикали
            PanelArray[X, Y].Width := 170;    // ширина панели
            PanelArray[X, Y].Height := 170;   // высота панели

            ImgArray[X, Y] := TImage.Create(PanelArray[X, Y]);
            ImgArray[X, Y].Parent := PanelArray[X, Y];
            ImgArray[X, Y].Left := x * 2;
            ImgArray[X, Y].Top := y * 2;
            ImgArray[X, Y].Width := 100;
            ImgArray[X, Y].Height := 100;
            //ImgArray[X, Y].Picture.LoadFromFile(IntToStr(x) + '.bmp');
            //ImgArray[X, Y].Picture.LoadFromFile('C:\image_ihumbnail_link\4.bmp');
            ImgArray[X, Y].Picture.LoadFromFile(ADOQuery1.FieldByName('ImageThumbnailLink').AsString);
            ImgArray[X, Y].Align := alClient;

            ImgArray[X, Y].AlignWithMargins := True;
            ImgArray[X, Y].Margins.Left := 0;
            ImgArray[X, Y].Margins.Top := 0;
            ImgArray[X, Y].Margins.Bottom := 0;
            ImgArray[X, Y].Margins.Right := 0;
            ImgArray[X, Y].Stretch := True;

          ADOQuery1.Next;
    end;


  end;



end;
...
Рейтинг: 0 / 0
22.12.2017, 15:05
    #39574492
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Да забудьте вы про двухмерный массив
...
Рейтинг: 0 / 0
22.12.2017, 15:19
    #39574497
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
procedure TForm1.FormCreate(Sender: TObject);
var
  X, Y, i: Integer;
  PanelArray: Array [1 .. 25] of TPanel;
  ImgArray: Array [1 .. 25] of TImage;
  ImgLink : string;
begin
  ADOQuery1.Close;
  ADOQuery1.Open;
  i := 1;
  X := 30;
  Y := 30;
  while not ADOQuery1.Eof do begin
     PanelArray[i] := TPanel.Create(Self);
     with PanelArray[i] do begin
      Parent := Self;
      BevelInner := bvNone;
      BevelKind := bkNone;
      BevelOuter := bvRaised;
      SetBounds(X,Y,170,170);
    end;
    ImgArray[i] := TImage.Create(PanelArray[i]);
    with ImgArray[X, Y] do begin
      Parent := PanelArray[i];
      Align := alClient;
      Picture.LoadFromFile(ADOQuery1['ImageThumbnailLink']);
      Stretch := True;
    end;
    ADOQuery1.Next;
    inc(i);
    inc(X,170);
    if X > 850 then begin
      inc(Y,170);
      X := 30;
    end;
  end;
end;
...
Рейтинг: 0 / 0
25.12.2017, 01:21
    #39575129
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
DimaBr

Спасибо!
...
Рейтинг: 0 / 0
02.01.2018, 15:30
    #39578713
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Почему то при OnClick показывает только первую запись, хотя значение к переменной ProdName присвоено в цикле?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
  private
    { Private declarations }

   procedure btnBuyProductsClick(Sender: TObject);
  public
    ProdName: string;
    { Public declarations }
  end;

procedure TMainForm.btnBuyProductsClick(Sender: TObject);
begin
  ShowMessage(ProdName);
end;

procedure TMainForm.GetCards;
var
  CardList : string;
  pName, pCountry, pSumm, pCurrency, pImageLink : string;
  S, Sc : string;
  X, Y, i: Integer;

  ButtonBuy: Array [1 .. 25] of TUniButton;
  PanelArray: Array [1 .. 25] of TuniPanel;
  ImgArray: Array [1 .. 25] of TuniImage;
  PanForImg: Array [1 .. 25] of TuniPanel;
  LabelProdName: Array [1 .. 25] of TUniLabel;
  LabelPrice: Array [1 .. 25] of TUniLabel;

begin
try
  spmProduct.Close;
  spmProduct.Open;
  i := 1;
  X := 30;
  Y := 30;
  while not spmProduct.Eof do
  begin
     //Главная панель
     PanelArray[i] := TuniPanel.Create(UniScrollBox2);      //(1)
     with PanelArray[i] do
     begin
      Parent := UniScrollBox2;
      BevelInner := bvNone;
      BevelKind := bkNone;
      BevelOuter := bvRaised;
      SetBounds(X,Y,160,250);
     end;

     //Панель картинки
     PanForImg[i] := TuniPanel.Create(PanelArray[i]);    //(2)
     with PanForImg[i] do
     begin
      Parent := PanelArray[i];
      BevelInner := bvNone;
      BevelKind := bkNone;
      BevelOuter := bvRaised;
      Align := alTop;
      SetBounds(0,0,150,160);
     end;

     // Картинка
     ImgArray[i] := TuniImage.Create(PanForImg[i]);      //(3)
     with ImgArray[i] do
     begin
      Parent := PanForImg[i];
      Align := alClient;
      Picture.LoadFromFile(spmProduct['image_ihumbnail_link']);
      Stretch := True;
     end;

     // Метка: Наименование продукта
     LabelProdName[i] := TUniLabel.Create(PanelArray[i]);    //(2)
     with LabelProdName[i] do
     begin
      Parent := PanelArray[i];
      Caption:= spmProduct['name'];
      SetBounds(5,185,10,50);
     end;

     // Метка: Цена товара
     LabelPrice[i] := TUniLabel.Create(PanelArray[i]);    //(2)
     with LabelPrice[i] do
     begin
      pSumm := spmProduct['price_begin'];
      pCurrency := spmProduct['currencies_name'];
      Font.Size := 10;
      Parent := PanelArray[i];
      Caption:= pSumm + ' ' + pCurrency;
      SetBounds(5,165,10,50);
     end;

     // Кнопка: В корзину
     ButtonBuy[i] := TUniButton.Create(PanelArray[i]);    //(2)
     with ButtonBuy[i] do
     begin
      Parent := PanelArray[i];
      Caption:= 'В корзину';
      OnClick := btnBuyProductsClick;
      ProdName:= spmProduct['name'];
      Align := alBottom;
     end;

    spmProduct.Next;

    inc(i);
    inc(X,180);
    if X > 850 then
    begin
      inc(Y,270);
      X := 30;
    end;
  end;
finally
  PanelArray[i].Free;
  ImgArray[i].Free;
  PanForImg[i].Free;
  ButtonBuy[i].Free;
  LabelProdName[i].Free;
  LabelPrice[i].Free;
end;
end;
...
Рейтинг: 0 / 0
02.01.2018, 18:08
    #39578742
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Вы в присваиваете значение ProdName, на следующем цикле в переменную ProdName запихиваете новое значение. Куда девается старое ? Правильно, исчезает.
Вывод ProdName должен тоже быть массивом
...
Рейтинг: 0 / 0
02.01.2018, 18:10
    #39578743
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Зачем запихивать в ProdName, если вы то же поле записываете в LabelProdName[i]
...
Рейтинг: 0 / 0
02.01.2018, 18:39
    #39578751
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
Вместо огорода массивов, создайте сущность, которая будет отражать один элемент
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
TMyObject = class(TPanel)
  public
    PanForImg: TPanel;
    Img: TImage;
    LabelProdName: TLabel;
    LabelPrice: TLabel;
    ButtonBuy: TButton;
    pSumm : Currency;
    pCurrency: string;
    constructor Create(AOwner: TComponent);override;
    destructor Destroy;override;
end;

constructor TMyObject.Create(AOwner: TComponent);
begin
  PanForImg := TuniPanel.Create(self);    //(2)
  with PanForImg do begin
    Parent := self;
    BevelInner := bvNone;
    BevelKind := bkNone;
    BevelOuter := bvRaised;
    Align := alTop;
    SetBounds(0,0,150,160);
   end;

     // Картинка
   Img := TuniImage.Create(self);      //(3)
   with Img do  begin
    Parent := PanForImg;
    Align := alClient;
//    Picture.LoadFromFile(spmProduct['image_ihumbnail_link']);
    Stretch := True;
   end;

     // Метка: Наименование продукта
   LabelProdName := TUniLabel.Create(self);    //(2)
   with LabelProdName do begin
    Parent := self;
//    Caption:= spmProduct['name'];
    SetBounds(5,185,10,50);
   end;

     // Метка: Цена товара
   LabelPrice := TUniLabel.Create(self);    //(2)
   with LabelPrice do begin
//    pSumm := spmProduct['price_begin'];
//    pCurrency := spmProduct['currencies_name'];
    Font.Size := 10;
    Parent := self;
//    Caption:= pSumm + ' ' + pCurrency;
    SetBounds(5,165,10,50);
   end;

     // Кнопка: В корзину
   ButtonBuy[i] := TUniButton.Create(self);    //(2)
   with ButtonBuy do begin
     Parent := self;
     Caption:= 'В корзину';
//      OnClick := btnBuyProductsClick;
//      ProdName:= spmProduct['name'];
     Align := alBottom;
   end;  
end;

destructor Destroy;
begin
  Img.Free;
  PanForImg.Free;
  ButtonBuy.Free;
  LabelProdName.Free;
  LabelPrice.Free;
  inherited Destroy;
end;



Далее управляйте этими сущностями

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  spmProduct.Close;
  spmProduct.Open;
  i := 1;
  X := 30;
  Y := 30;
  while not spmProduct.Eof do begin
    MyObjects[i] := TMyObject.Create(Self);
    with MyObject[i] do begin
      Parent := UniScrollBox2;
      SetBounds(X,Y,160,250);
      Img.Picture.LoadFromFile(spmProduct['image_ihumbnail_link']);
      LabelProdName.Caption:= spmProduct['name'];
      pSumm := spmProduct['price_begin'];
      pCurrency := spmProduct['currencies_name'];
      LabelPrice.Caption:= pSumm + ' ' + pCurrency;
      ButtonBuy.OnClick := btnBuyProductsClick;
    end;
    spmProduct.Next;
    inc(i);
    inc(X,180);
    if X > 850 then begin
      inc(Y,270);
      X := 30;
    end;
  end;



Ну и в событии btnBuyProductsClick в параметре Sender будет кнопка на которую нажали.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TMyForm.btnBuyProductsClick(Sender: TObject);
var Btn: TButton;
     MyObject: TMyObject;
begin
  Btn := TButton(Sender);
  MyObject := TMyObject(Btn.Owner); // непосредственно объект, на кнопку которого мы нажали
// ну а у объекта уже есть все данные
// MyObject.pSumm - цена
// MyObject.pCurrency - валюта
end;
...
Рейтинг: 0 / 0
03.01.2018, 07:45
    #39578853
Askat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TPanel + TImage массив
DimaBr,

Ошибка вываливается

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, uniGUITypes, uniGUIAbstractClasses,
  uniGUIClasses, uniGUIRegClasses, uniGUIForm, Data.DB, Data.Win.ADODB,
  uniGUIBaseClasses, uniScrollBox, uniPanel, uniImage, uniButton, uniLabel;

type

TMyObject = class(TUniPanel)
  public
    PanForImg: TUniPanel;
    Img: TUniImage;
    LabelProdName: TUniLabel;
    LabelPrice: TUniLabel;
    ButtonBuy: TUniButton;
    pSumm : Currency;
    pCurrency: string;
    constructor Create(AOwner: TComponent);
    override;
    destructor Destroy;
    override;
end;


  TMainForm = class(TUniForm)
    ADOConnection1: TADOConnection;
    spmProduct: TADOQuery;
    UniScrollBox1: TUniScrollBox;
    procedure UniFormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure btnBuyProductsClick(Sender: TObject);
  public
    { Public declarations }
  end;

function MainForm: TMainForm;

implementation

{$R *.dfm}

uses
  uniGUIVars, MainModule, uniGUIApplication;

function MainForm: TMainForm;
begin
  Result := TMainForm(UniMainModule.GetFormInstance(TMainForm));
end;



constructor TMyObject.Create(AOwner: TComponent);
begin
   //Главная панель
  PanForImg := TuniPanel.Create(self);      //(2)
  with PanForImg do begin
    Parent := Self;             [color=red]<-- ВОТ НА ЭТОЙ СТРОЧКЕ ОШИБКА.[/color]
    BevelInner := bvNone;
    BevelKind := bkNone;
    BevelOuter := bvRaised;
    Align := alTop;
    SetBounds(0,0,150,160);
  end;

     // Картинка
   Img := TuniImage.Create(self);           //(3)
   with Img do begin
    Parent := self;
    Align := alClient;
//    Picture.LoadFromFile(spmProduct['image_ihumbnail_link']);
    Stretch := True;
   end;

     // Метка: Наименование продукта
   LabelProdName := TUniLabel.Create(self);    //(2)
   with LabelProdName do begin
    Parent := self;
//    Caption:= spmProduct['name'];
    SetBounds(5,185,10,50);
   end;

     // Метка: Цена товара
   LabelPrice := TUniLabel.Create(self);    //(2)
   with LabelPrice do begin
//    pSumm := spmProduct['price_begin'];
//    pCurrency := spmProduct['currencies_name'];
    Parent := self;
    Font.Size := 10;
//    Caption:= pSumm + ' ' + pCurrency;
    SetBounds(5,165,10,50);
   end;

     // Кнопка: В корзину
   ButtonBuy := TUniButton.Create(self);    //(2)
   with ButtonBuy do begin
     Parent := self;
     Caption:= 'В корзину';
//      OnClick := btnBuyProductsClick;
//      ProdName:= spmProduct['name'];
     Align := alBottom;
   end;
end;


procedure TMainForm.btnBuyProductsClick(Sender: TObject);
var
  Btn: TUniButton;
  MyObject: TMyObject;
begin
  Btn := TUniButton(Sender);
  MyObject := TMyObject(Btn.Owner); 
end;


procedure TMainForm.UniFormCreate(Sender: TObject);
var
  X, Y, i: Integer;
  MyObject: array[1 .. 25] of TMyObject;

begin
  spmProduct.Close;
  spmProduct.Open;
  i := 1;
  X := 30;
  Y := 30;
  while not spmProduct.Eof do begin
    MyObject[i] := TMyObject.Create(Self);
    with MyObject[i] do begin
      Parent := UniScrollBox1;
      SetBounds(X,Y,160,250);
      Img.Picture.LoadFromFile(spmProduct['image_ihumbnail_link']);
      LabelProdName.Caption:= spmProduct['name'];
   //   pSumm := spmProduct['price_begin'];
   //   pCurrency := spmProduct['currencies_name'];
      LabelPrice.Caption:= spmProduct['price_begin'] + ' ' + pCurrency;
      ButtonBuy.OnClick := btnBuyProductsClick;
    end;
    spmProduct.Next;
    inc(i);
    inc(X,180);
    if X > 850 then begin
      inc(Y,270);
      X := 30;
    end;
  end;
end;

destructor TMyObject.Destroy;
begin
  Img.Free;
  PanForImg.Free;
  ButtonBuy.Free;
  LabelProdName.Free;
  LabelPrice.Free;
  inherited;
end;

initialization
  RegisterAppFormClass(TMainForm);

end.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TPanel + TImage массив / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]