TImageList/ru

From Lazarus wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English (en) français (fr) русский (ru) 中文(中国大陆)‎ (zh_CN)

TImageList timagelist.png является компонентом, представляющим собой список изображений, которые могут использоваться в других компонентах, таких как TToolBar или TActionList.

Пример использования с элементом ComboBox

Для использования TImageList, разместите объект TImageList на форме. В данном примере нам необходимо шесть изображений.

Все изображения должны быть одинакового размера. Если используется два разных размера изображений, то нужно использовать и два компонента TImageList.

Установите высоту и ширину изображений в Инспекторе объектов; в нашем случае 50 пикселов в ширину и 18 пикселов высоту.

Установите свойство Style в значение csOwnerDrawFixed.

Дважды щелкните по значку элемента TImageList для того, чтобы открыть редактор TImageList. Убедитесь, что при выборе значки отображаются корректно. Если они меньше, чем требуется, проверьте их размер в Инспекторе объектов (например, с помощью быстрой клавиши <F11>). При необходимости вы можете заново загрузить изображения.

ImageListEd.png

Поместите элемент ComboBox на форму и присвойте ему имя cbSymbols в свойстве Name.

В событии FormCreate введите следующее:

 cbSymbols.Items.Clear;
 for I := 0 to 5 do
   cbSymbols.Items.Add('');
 cbSymbols.ItemIndex := 0;

В результате в элемент ComboBox будет добавлено 6 пустых строк и выбрана первая из них.

В событии OnDrawItem для элемента cbSymbols поместите следующий код:

procedure TMyForm.cbSymbolsDrawItem( 
  aControl: TWinControl;
  iIndex: Integer; 
  aRect: TRect; 
  aState: TOwnerDrawState );
var
  cnv: TCanvas;
begin
  if not (aControl is TComboBox) then exit;
  cnv := TComboBox( aControl ).Canvas;
  Imagelist1.Draw( cnv, aRect.Left+2, aRect.Top+2, iIndex );
end;

При необходимости скорректируйте центрирование изображения в элементе по центру (изменяя значение +2).

combo.png

Пример использования с элементом SpeedButton

Добавьте изображения в элемент ImageList1 как в предыдущем примере и используйте их с помощью следующего кода:

   ImageList1.GetBitmap(iIndex,SpeedButton1.Glyph);

Элемент TImageList с поддержкой нескольких разрешений изображения в Lazarus версии 1.9 и выше

В Lazarus версии 1.9 компонент TImageList был переписан для того, чтобы поддерживать несколько разрешений одного изображения.

ImageListEd-1.9.png

Каждый элемент управления из библиотеки LCL, поддерживающий работу с элементом ImageList, теперь содержит новое свойство [Images]Width, чтобы определить какая пользовательская ширина должна использоваться для разрешения 96 PPI (100% масштаб). Примеры: TToolBar.Images/ImageWidth, TListView.LargeImages/LargeImagesWidth.

Установите свойство Scaled в значение True и элемент ImageList автоматически подберет масштаб изображения в вашем приложении с поддержкой High-DPI.

Демонстрационные приложения

Здесь представлен исходный код 2-х демонстрационных приложений в директории с Lazarus:

  • examples/imagelist_highdpi_designtime
  • examples/imagelist_highdpi_runtime

Изменения, влияющие на обратную совместимость

Метод Add

  • Старое поведение: изображение было нарезано, если оно большое, или расширено, если оно слишком маленькое.
  • Новое поведение: изображение в элементе ImageList масштабируется под все разрешения.
  • Причина: теперь поддерживает несколько разрешений.
  • Устранение: используйте AddSliced (если изображение состоит из нескольких добавляемых значков) или AddSlice (если нужно добавить одно изображение из пользовательского прямоугольника, также поддерживается прямоугольная область вне изображения).

Альтернатива с высоким разрешением для Lazarus 1.8 и старше: изменение размеров всех изображений в элементе TImageList

Это удобно при масштабировании в приложениях с поддержкой High DPI для получения значков с высоким разрешением при работе с такими элементами, как TActionList, TMainMenu и TToolBar. Примечание: данный способ может работать некорректно со всеми компонентами на всех платформах.

procedure ScaleImageList(ImgList: TImageList; NewWidth, NewHeight: Integer);
var
  TempImgList: TImageList;
  TempBmp1: TBitmap;
  TempBmp2: TBitmap;
  I: Integer;
begin
  TempImgList := TImageList.Create(nil);
  TempBmp1 := TBitmap.Create;
  TempBmp1.PixelFormat := pf32bit;
  TempBmp2 := TBitmap.Create;
  TempBmp2.PixelFormat := pf32bit;
  TempBmp2.SetSize(NewWidth, NewHeight);
  try
    TempImgList.Width := NewWidth;
    TempImgList.Height := NewHeight;

    for I := 0 to ImgList.Count - 1 do begin
      // Load image for given index to temporary bitmap
      ImgList.GetBitmap(I, TempBmp1);

      // Clear transparent image background
      TempBmp2.Canvas.Brush.Style := bsSolid;
      TempBmp2.Canvas.Brush.Color := TempBmp2.TransparentColor;
      TempBmp2.Canvas.FillRect(0, 0, TempBmp2.Width, TempBmp2.Height);

      // Stretch image to new size
      TempBmp2.Canvas.StretchDraw(Rect(0, 0, TempBmp2.Width, TempBmp2.Height), TempBmp1);
      TempImgList.Add(TempBmp2, nil);
    end;

    ImgList.Assign(TempImgList);
  finally
    TempImgList.Free;
    TempBmp1.Free;
    TempBmp2.Free;
  end;
end;

См. также


Компоненты LCL
Вкладка Компоненты
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog • TTaskDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TBufDataset • TMemDataset • TSdfDataSet • TFixedFormatDataSet • TDbf
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TLvlGraphControl • TShortPathEdit • TSpinEditEx • TFloatSpinEditEx • TTreeFilterEdit • TExtendedTabControl •
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TSynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHttpDataProvider • TIpHtmlPanel