Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разрушается ли Glyph у SpeedButton?


Ega23 ©   (2006-07-28 13:39:00) 

В ран-тайме создаётся N экземпляров TSpeedButton. Из БД беруться Caption и картинка (bmp).

 With adsTemp do
  begin
   while(not Eof) do
   begin
     btn.Caption  := adoq.fieldbyName('CLSMetNam').AsString;

     btn.Visible  := true;
     btn.Enabled  := true;
     btn.Flat     := false;

     if not fieldbyName('CLSMetImg').IsNull then
      begin
       ms:=TMemoryStream.Create;
       try
         TBLOBField(fieldbyName('CLSMetImg')).SaveToStream(ms);
         ms.Position:=0;
         bmp:=TBitmap.Create;
         bmp.LoadFromStream(ms);
         btn.Glyph:=bmp;
       finally
         ms.Free;
       end;
      end;

      btn.Layout:=blGlyphLeft;


Здесь bmp:TBitmap, btn:TSpeedButton, adsTemp:TDataSet

Убиваются кнопки потом сами.
Вопрос: надо ли им специально bmp разрушать, или TSpeedButton сделает это "автоматом"?


Мефисто   (2006-07-28 14:13:00) [1]

А почему бы и нет

procedure TButtonGlyph.SetGlyph(Value: TBitmap);
var
 Glyphs: Integer;
begin
 Invalidate;
 FOriginal.Assign(Value);
 if (Value <> nil) and (Value.Height > 0) then
 begin
   FTransparentColor := Value.TransparentColor;
   if Value.Width mod Value.Height = 0 then
   begin
     Glyphs := Value.Width div Value.Height;
     if Glyphs > 4 then Glyphs := 1;
     SetNumGlyphs(Glyphs);
   end;
 end;
end;


Ega23   (2006-07-28 14:07:00) [2]

Другой вопрос: а как его просто очистить? Т.е. есть SpeedButton.Glyph, непустой.
Нужно его убрать.
SpeedButton.Glyph:=nil  корректно, или нет?


Ega23   (2006-07-28 13:51:00) [3]


> btn.Glyph.LoadFromStream(ms);
>


Ага, я уже сам допёр...  :)


begin...end   (2006-07-28 13:49:00) [4]

> Ega23 ©   (28.07.06 13:39) [0]

> bmp:=TBitmap.Create;
> bmp.LoadFromStream(ms);
> btn.Glyph:=bmp;

btn.Glyph.LoadFromStream(ms);

?


Мефисто   (2006-07-28 13:48:00) [5]

bmp :=TBitmap.Create;

А уничтожить?

Наверно так лучше?
btn.Glyph.Assign(bmp);

TSpeedButton.Glyph - высвобождает ресурсы сам без участия программиста.


Наверх

Титульная страница Поиск, карта сайта Написать письмо