![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Замена Glyph на батоне [D6, Win2k]
slaga © (2004-11-08 13:34:00)Есть батон, мне надо что б при определенном действии на нем менялся Glyph, я это делаю так:
Дейсвие 1:(ImageListAll набор картинок)
ImageListAll.GetBitmap(11, cxButton3.Glyph);
Дейсвие 2:
ImageListAll.GetBitmap(9, cxButton3.Glyph);
Но ничего не происходит.
А вот если сделать так:
ImageListAll.GetBitmap(11, cxButton3.Glyph);
cxButton3.NumGlyphs := 2;
cxButton3.NumGlyphs := 1;
Тогда Glyph меняется. Но это ж неправильно :((
А как правильно ?
slaga (2004-11-09 17:19:00) [1]to Amoeba © (09.11.04 17:08) [14]
Спасибо большое :) буду читать.
Amoeba (2004-11-09 17:08:00) [2]
> slaga © (09.11.04 16:42) [13]
> Спасибо :)
>
> А что такое : "вот, из кулибы:", кто такой кулиба ?
Это советы по Delpi от В.Озерова в формате CHM. Можно скачать у А.Подгорецкого на http://www.podgoretsky.com/pascal.html
slaga (2004-11-09 16:42:00) [3]Спасибо :)
А что такое : "вот, из кулибы:", кто такой кулиба ?
KilkennyCat (2004-11-09 00:46:00) [4]вот, из кулибы:
Иконка компонента является инкапсулированным объектом, требующим для хранения изображения некоторый участок памяти. Следовательно, при замене иконки, память, связанная с первоначальной иконкой, должна возвратиться в кучу, а для новой иконки требуется новое распределение памяти. По правилам Delphi, этим должен заниматься метод "Assign". Ниже приведен код всей процедуры замены иконки.
--------------------------------------------------------------------------------
implementation
{$R *.DFM}
var n: integer; // При инициализации программы данное значение будет равным нулю
procedure TForm1.Button1Click(Sender: TObject);
var Image: TBitmap;
begin // Изменение иконки в BitBtn1
Image:= TBitmap.Create;
if n < ImageList1.Count then
ImageList1.GetBitmap(n, Image);
{end if}
BitBtn1.Glyph.Assign(Image) // Примечание: Для изменения свойств объекта используется метод Assign
inc(n,2); // В данный момент кнопка содержит две иконки!
if n > ImageList1.Count then
n:= 0;
{end if}
Image.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin // добавляем новую иконку кнопки в список ImageList1
if OpenDialog1.Execute then
ImageList1.FileLoad(rtBitMap,OpenDialog1.FileName,clBtnFace);
label1.Caption:= 'Количество иконок = ' + IntToStr(ImageList1.Count);
end;
KilkennyCat (2004-11-09 00:44:00) [5]неужели нету?
slaga (2004-11-08 17:47:00) [6]:)) если бы
KilkennyCat (2004-11-08 14:36:00) [7]ImageListAll.GetBitmap(11, cxButton3.Glyph);
cxButton3.RePaint (или что-то там у нее, вообщем, перерисовка).
slaga (2004-11-08 14:33:00) [8]ну мне бы лучше всетаки узнать что надо перерисовывать.
KilkennyCat (2004-11-08 14:12:00) [9]вообщем, я бы создал один длинный глиф, присвоил бы его всем кнопкам и двигал индексом. Если кнопок много и глиф большой, присваивание сделать программно, либо в ресурс вообще закинуть, с целью уменьшения веса екзешника.
KilkennyCat (2004-11-08 14:09:00) [10]а нет изменений в первом варианте вероятно из-за того, что нет вызова перерисовки кнопки.
KilkennyCat (2004-11-08 14:08:00) [11]ага... посмотрел внмательно. ну и что?
в данном случае, можно рассматривать глиф кнопки как имаджелист.
KilkennyCat (2004-11-08 14:05:00) [12]
> slaga © (08.11.04 13:56) [2]
Indicates the number of images that are in the graphic specified in the Glyph property.
Delphi syntax:
property NumGlyphs: TNumGlyphs;
Description
If you have multiple images in a bitmap, you must specify the number of images that are in the bitmap with the NumGlyphs property. The default value is 1.
это справка. Двигание, смена... это масляное масло, на мой взгляд. По-моему, я все верно описал, с точки зрения алгоритма.
Sash (2004-11-08 14:02:00) [13]2 slaga © (08.11.04 13:56) [2]
у обычного баттона вообще нет Glyph'ов, так что используй bitbtn
slaga (2004-11-08 13:56:00) [14]Неа, у обычного батона нет индекса картинок:
cxButton3.NumGlyphs := 2;
Это только двигает картинку по батону, тем самым перересовывает ее и она меняется, но мне кажется что это бред, какое свойство надо перерисовать что б визуально поменялась картинка ?
KilkennyCat (2004-11-08 13:41:00) [15]почему неправильно?
правильно так:
создается имажелист, закидываются в него картинки.
имажелист привязывается к объекту, в данном случае - кнопке.
каждая картинка имеет индекс.
у объекта есть свойство, указывающее индекс картинки в имажелисте.
смена этого индекса вызывает смену картинки.