Не отображаются картинки на тулбарах, кнопках, меню, и т.д. - везде, где используется TImageList для хранения массива изображений. Искажение цветов при использовании 256-цветных картинок в палитровом видеорежиме.

 

ТИПОВЫЕ РЕШЕНИЯ.

 

Не использовать TImageList, если это возможно.

Не хранить содержимое TImageList в ресурсе формы, а загружать в runtime из подготовленной bitmap или ресурса.

Обновить версию системной библиотеки comctl32.dll.

При увеличении размера компонента TImage в RunTime пытаюсь рисоватьзаново на всем поле, но отображается только часть компонента (прежнегоразмера). В чем дело?

 

Нужно при инициализации выполнить SetBounds(), с максимальными размерами.

 

Многие, наверно, сталкивались с проблемой перемещения Image'a по форме. Решить ее можно тремя способами (может есть и больше, но я знаю только три). Способ первый. Его суть заключается в том, что свойства Left и Top картинки изменяются на разницу между начальными и конечными координатами (нажатия и отпускания мыши соответственно). Этот способ самый простой и надежный, но у него есть один недостаток: left и top изменяются по очереди, что приводит к заметному мерцанию картинки. Тем не менее мы этот способ рассмотрим. Не забудьте положить на форму Image и вставить в нее какую-нибудь картинку. Для начала необходимо объявить глобальные переменные (они объявляются в разделе Implementation) x0, y0:integer - они будут запоминать начальные координаты. И еще нам понадобится переменная move типа boolean, чтобы нам отличать перемещение мыши над картинкой, от попытки ее сдвинуть. Эти объявления делаются примерно так:

 

 

procedure TForm1.Button1Click(Sender: TObject);

var

  bm : TBitmap;

  il : TImageList;

begin

  bm := TBitmap.Create;

  bm.LoadFromFile('C:\DownLoad\TEST.BMP');

  il := TImageList.CreateSize(bm.Width,bm.Height);

  il.DrawingStyle := dsTransparent;

  il.Masked := true;

  il.AddMasked(bm, clRed);

  il.Draw(Form1.Canvas, 0, 0, 0);

  bm.Free;

  il.Free;

end;

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

  ico: TIcon;

begin

  ico := TIcon.Create;

  try

    Imagelist1.GetIcon(0, ico); // Get first icon from Imagelist1

    Imagelist2.AddIcon(ico); // Add the icon to Imagelist2

finally

    ico.Free;

  end;

end;

 

 

Code:

var

Bitmap: TBitmap;

Source: TRect;

Dest: TRect;

begin

Bitmap := TBitmap.Create;

try

   with Bitmap do

   begin

     Width := MyPaintBox.Width;

     Height := MyPaintBox.Height;

     Dest := Rect(0, 0, Width, Height);

   end;

   with MyPaintBox do

     Source := Rect(0, 0, Width, Height);

   Bitmap.Canvas.CopyRect(Dest, MyPaintBox.Canvas, Source);

   Bitmap.SaveToFile('MYFILE.BMP');

finally

   Bitmap.Free;

end;

end;

 

 

 

Code:

// There are ready-made methods for saving any component including all its children to a file.

// For writing components use WriteComponentResFile(path + source filename , component name source)

 

WriteComponentResFile('C:\imagelist1.bin',imagelist1);

 

// For reading the data back to a component:

// component := ReadComponentResFile(path + source filename , component name traget)

 

imagelist1 := ReadComponentResFile('c:\imagelist1.bin', nil) as TImagelist;

 

// Tip 1 - Reading the component will give the same name of the component written so don't try to

// load it to another component, even if it was the same type. You will get a duplicate name and

// delphi will crash. But you can jump over this as a programmer

 

// Tip 2 - Get benfit of storing the heavy components inside compressed files,

// so you can get smaller programs

 

По умолчанию цвет нижнего левого пикселя считается прозрачным, только та программа/контрол/компонент который отражает эту иконку должна поддерживать прозрачность...

 

 

Модуль ImgTools предоставляет функции для работы с изображениями,

в частности для работы с визуальным объектом типа TImage.

 

Function FitBestSize - Подбор оптимального размера рисунка,

в соответствии с областью на которой он расположен

Function CenterImage - Центрирование рисунка в области, на которой он расположен

Function SetImageSize - Процентное изменение размера рисунка

 

 

Code:

// clear a Image's picture

Image1.Picture := nil;

 

Попробуйте установить:

Code:

Image1.ControlStyle := Image1.ControlStyle + [csOpaque];

 

в обработчике события формы OnCreate (или, по крайней мере прежде, чем вы покажете форму). Компоненты TImage изначально прозрачные (за исключением области, занятой изображением), поэтому сообщая Delphi, что компонент непрозрачен, вы тем самым помешаете что-либо "рисовать" на области, не занятой собственно изображением (типа клиентской области формы).