Image, Icon, Shape, PainBox
Не отображаются картинки на тулбарах, кнопках, меню, и т.д. - везде, где используется TImageList для хранения массива изображений. Искажение цветов при использовании 256-цветных картинок в палитровом видеорежиме.
ТИПОВЫЕ РЕШЕНИЯ.
Не использовать TImageList, если это возможно.
Не хранить содержимое TImageList в ресурсе формы, а загружать в runtime из подготовленной bitmap или ресурса.
Обновить версию системной библиотеки comctl32.dll.
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
При увеличении размера компонента TImage в RunTime пытаюсь рисоватьзаново на всем поле, но отображается только часть компонента (прежнегоразмера). В чем дело?
Нужно при инициализации выполнить SetBounds(), с максимальными размерами.
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
Многие, наверно, сталкивались с проблемой перемещения Image'a по форме. Решить ее можно тремя способами (может есть и больше, но я знаю только три). Способ первый. Его суть заключается в том, что свойства Left и Top картинки изменяются на разницу между начальными и конечными координатами (нажатия и отпускания мыши соответственно). Этот способ самый простой и надежный, но у него есть один недостаток: left и top изменяются по очереди, что приводит к заметному мерцанию картинки. Тем не менее мы этот способ рассмотрим. Не забудьте положить на форму Image и вставить в нее какую-нибудь картинку. Для начала необходимо объявить глобальные переменные (они объявляются в разделе Implementation) x0, y0:integer - они будут запоминать начальные координаты. И еще нам понадобится переменная move типа boolean, чтобы нам отличать перемещение мыши над картинкой, от попытки ее сдвинуть. Эти объявления делаются примерно так:
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
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;
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
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; |
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
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; |
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
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 |
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
По умолчанию цвет нижнего левого пикселя считается прозрачным, только та программа/контрол/компонент который отражает эту иконку должна поддерживать прозрачность...
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
Модуль ImgTools предоставляет функции для работы с изображениями,
в частности для работы с визуальным объектом типа TImage.
Function FitBestSize - Подбор оптимального размера рисунка,
в соответствии с областью на которой он расположен
Function CenterImage - Центрирование рисунка в области, на которой он расположен
Function SetImageSize - Процентное изменение размера рисунка
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
Code: |
// clear a Image's picture Image1.Picture := nil; |
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox
Попробуйте установить:
Code: |
Image1.ControlStyle := Image1.ControlStyle + [csOpaque]; |
в обработчике события формы OnCreate (или, по крайней мере прежде, чем вы покажете форму). Компоненты TImage изначально прозрачные (за исключением области, занятой изображением), поэтому сообщая Delphi, что компонент непрозрачен, вы тем самым помешаете что-либо "рисовать" на области, не занятой собственно изображением (типа клиентской области формы).
- Подробности
- Родительская категория: VCL
- Категория: Image, Icon, Shape, PainBox