![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разрушается ли 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 - высвобождает ресурсы сам без участия программиста.