Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Замена Glyph на батоне   Найти похожие ветки 

 
slaga ©   (2004-11-08 13:34) [0]

Есть батон, мне надо что б при определенном действии на нем менялся Glyph, я это делаю так:

Дейсвие 1:
ImageListAll.GetBitmap(11, cxButton3.Glyph);
Дейсвие 2:
ImageListAll.GetBitmap(9, cxButton3.Glyph);
(ImageListAll набор картинок)

Но ничего не происходит.

А вот если сделать так:
ImageListAll.GetBitmap(11, cxButton3.Glyph);
cxButton3.NumGlyphs := 2;
cxButton3.NumGlyphs := 1;


Тогда Glyph меняется. Но это ж неправильно :((

А как правильно ?


 
KilkennyCat ©   (2004-11-08 13:41) [1]

почему неправильно?

правильно так:
создается имажелист, закидываются в него картинки.
имажелист привязывается к объекту, в данном случае - кнопке.
каждая картинка имеет индекс.
у объекта есть свойство, указывающее индекс картинки в имажелисте.
смена этого индекса вызывает смену картинки.


 
slaga ©   (2004-11-08 13:56) [2]

Неа, у обычного батона нет индекса картинок:
cxButton3.NumGlyphs := 2;
Это только двигает картинку по батону, тем самым перересовывает ее и она меняется, но мне кажется что это бред, какое свойство надо перерисовать что б визуально поменялась картинка ?


 
Sash ©   (2004-11-08 14:02) [3]

2 slaga ©   (08.11.04 13:56) [2]
у обычного баттона вообще нет Glyph"ов, так что используй bitbtn


 
KilkennyCat ©   (2004-11-08 14:05) [4]


> 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.

это справка. Двигание, смена... это масляное масло, на мой взгляд. По-моему, я все верно описал, с точки зрения алгоритма.


 
KilkennyCat ©   (2004-11-08 14:08) [5]

ага... посмотрел внмательно. ну и что?
в данном случае, можно рассматривать глиф кнопки как имаджелист.


 
KilkennyCat ©   (2004-11-08 14:09) [6]

а нет изменений в первом варианте вероятно из-за того, что нет вызова перерисовки кнопки.


 
KilkennyCat ©   (2004-11-08 14:12) [7]

вообщем, я бы создал один длинный глиф, присвоил бы его всем кнопкам и двигал индексом. Если кнопок много и глиф большой, присваивание сделать программно, либо в ресурс вообще закинуть, с целью уменьшения веса екзешника.


 
slaga ©   (2004-11-08 14:33) [8]

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


 
KilkennyCat ©   (2004-11-08 14:36) [9]

ImageListAll.GetBitmap(11, cxButton3.Glyph);
cxButton3.RePaint (или что-то там у нее, вообщем, перерисовка).


 
slaga ©   (2004-11-08 17:47) [10]

:)) если бы


 
KilkennyCat ©   (2004-11-09 00:44) [11]

неужели нету?


 
KilkennyCat ©   (2004-11-09 00:46) [12]

вот, из кулибы:

Иконка компонента является инкапсулированным объектом, требующим для хранения изображения некоторый участок памяти. Следовательно, при замене иконки, память, связанная с первоначальной иконкой, должна возвратиться в кучу, а для новой иконки требуется новое распределение памяти. По правилам 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;


 
slaga ©   (2004-11-09 16:42) [13]

Спасибо :)

А что такое : "вот, из кулибы:", кто такой кулиба ?


 
Amoeba ©   (2004-11-09 17:08) [14]


> slaga ©   (09.11.04 16:42) [13]
> Спасибо :)
>
> А что такое : "вот, из кулибы:", кто такой кулиба ?

Это советы по Delpi от В.Озерова в формате CHM. Можно скачать у А.Подгорецкого на http://www.podgoretsky.com/pascal.html


 
slaga ©   (2004-11-09 17:19) [15]

to Amoeba ©   (09.11.04 17:08) [14]

Спасибо большое :) буду читать.



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
14-1099503073
Comp
2004-11-03 20:31
2004.11.21
Подсчет траффика


9-1088556762
Xerx
2004-06-30 04:52
2004.11.21
Принцип построения теней


3-1098527932
Black
2004-10-23 14:38
2004.11.21
Как отобразить значение n ой записи m ого столбца?


1-1099654912
Новичек
2004-11-05 14:41
2004.11.21
Передача параметров в dll.


10-1065133576
s_g
2003-10-03 02:26
2004.11.21
Мастера, подскажите интерфейс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский