Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

TPanel + TImage array

#delphi


Как сделать расстояние между края картинки и панели одинаковыми во всех ячейках?
У меня почему-то идет смещение картинок внутри панели. 

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
    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 * 170 - 150;  // расстояние между панелями по горизонтали
      PanelArray[X, Y].Top := Y * 170 - 150;  // расстояние между панелями по вертикали
      PanelArray[X, Y].Width := 150;    // ширина панели
      PanelArray[X, Y].Height := 155;   // высота панели

      ImgArray[X, Y] := TImage.Create(PanelArray[X, Y]);
      ImgArray[X, Y].Parent := PanelArray[X, Y];
      ImgArray[X, Y].Left := x * 10 - 8;
      ImgArray[X, Y].Top := y * 10 - 8;
      ImgArray[X, Y].Width := 100;
      ImgArray[X, Y].Height := 100;
      ImgArray[X, Y].Picture.LoadFromFile(IntToStr(x) + '.bmp');
    end;
end;

    


Ответы

Ответ 1



PanelArray[X, Y].Width := 150; // ширина панели PanelArray[X, Y].Height := 150; // высота панели У Вас одна картинка на панели. Ее положение не будет зависеть от счетчиков циклов. ImgArray[X, Y].Left := 2; ImgArray[X, Y].Top := 2;

Ответ 2



@Igor полностью прав. Могу дополнить только что можно еще так: ... ImgArray[X, Y].Align := alClient; //настройка отступов если нужно ImgArray[X, Y].AlignWithMargins := True; ImgArray[X, Y].Margins.Left := 2; ImgArray[X, Y].Margins.Top := 2; ImgArray[X, Y].Margins.Bottom := 0; ImgArray[X, Y].Margins.Right := 0; ... В таком случае не будет проблем с High Dpi.

Комментариев нет:

Отправить комментарий