delphi: назначить изображение под своим именем из базы данных - PullRequest
0 голосов
/ 03 ноября 2018

Я хочу выбрать изображение, которое будет отображаться по его имени в таблице базы данных. Обратите внимание, что изображения в PngImageList1 и имеют то же имя. Могу ли я заменить индекс и поставить вместо него имя? Пожалуйста, помогите.

procedure TForm3.FormCreate(Sender: TObject);
   var
cartRow: TFrm;
posX,posY : SmallInt;
P : TPanel ;
IMG : TImage;
larn : TLabel;
larc : TLabel;
lari : TLabel;
larfd : TLabel;
imgname,path:string;
begin
ScrollBox1.DestroyComponents;
posX := 0;
posY := 0;
imgname := FDQuery1.FieldByName('ImagePath').AsString;
FDQuery1.First;
while not FDQuery1.Eof do
  begin
    cartRow := TFrm.Create(ScrollBox1);
    cartRow.Parent := ScrollBox1;
    cartRow.Name := '';
    cartRow.Left := posX - 1;
    cartRow.Top := posY - 1;
    cartRow.Label1.Caption := FDQuery1.FieldByName('CountryAr').AsString;
    cartRow.Label2.Caption := FDQuery1.FieldByName('CountryID').AsString;
    PngImageList1.GetBitmap(imgname, cartRow.CIMG.Picture.Bitmap);
    cartRow.Width := ScrollBox1.Width;
    posY := posY + cartRow.Height + 1;
    FDQuery1.Next;
  end;

Таблица базы данных:

Database table

PngImageList1:

PngImageList1

1 Ответ

0 голосов
/ 03 ноября 2018

В последней версии TPngImageList введена функция IndexByName: PngComponents

Если вы не можете или не хотите обновляться, вы можете реализовать подобную функцию в своем коде на основе оригинальных источников:

function TPngImageList.FindIndexByName(const AName: string): Integer;
var
  I: Integer;
begin
  Result := -1;
  for I := 0 to PngImages.Count - 1 do begin
    if SameText(PngImages[I].Name, AName) then begin
      Result := I;
      Break;
    end;
  end;
end;
...