Admin |
Отправлено: 15.06.2004, 17:19 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Есть база данных FireBird в ней таблица MYTABLE, в ней поле ICON
для хранения графики (иконок .ico)
объявлено как:
ICON BLOB SUB_TYPE 0 SEGMENT SIZE 80
на форме в С++Builder компонент DBImage, в котором эти
иконки отображаются. (для доступа использую компоненты FIBPlus)
Есть запрос на изменение данных
(для вставки картинки в это поле)
SQL | UPDATE MYTABLE SET
ICON = ?ICON
WHERE ID = ?OLD_ID
|
Нужно вставить картинку из файла .ico в это поле.
Со вставкой картинок типа .bmp проблем не возникает:
CODE |
//---------------------------------------------------------------------------
// OPD — это компонент OpenPictureDialog
// tblMYTABLE — TpFIBDataSet
void __fastcall TForm1::sbIconClick(TObject *Sender)
{
TStream *S;
TFileStream* FileS;
if(!OPD->Execute()) return;
tblMYTABLE->Edit();
S = tblMYTABLE->CreateBlobStream(tblMYTABLE->FieldByName("ICON"), bmReadWrite);
try{
FileS = new TFileStream(OPD->FileName, fmOpenRead);
S->CopyFrom(FileS, FileS->Size);
}
__finally{
tblMYTABLE->Post();
delete FileS; delete S;
}
}
|
или
CODE |
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
if(OPD->Execute()){
tblMYTABLE->Edit();
//
TMemoryStream *pMS = new TMemoryStream;
pMS->LoadFromFile(OPD->FileName);
tblMYTABLEICON->LoadFromStream(pMS);
//
tblMYTABLE->Post();
}
}
//---------------------------------------------------------------------------
|
а вот на формат .ico ругается, говорит "Bitmap image is not valid"
я так понимаю надо конвертить .ico в bitmap и тогда вставлять ?
Как это сделать ? Или есть другой способ ?
|
|
Admin |
Отправлено: 15.06.2004, 17:40 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Один кривой способ нашел: (через ImageList)
CODE |
//---------------------------------------------------------------------------
// IconList — это ImageList
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
if(OPD->Execute()){
if(tblMYTABLE->State != dsEdit) tblMYTABLE->Edit();
// get icon from file to Icon
Graphics::TIcon *Icon = new Graphics::TIcon();
Icon->LoadFromFile(OPD->FileName);
IconList->AddIcon(Icon);
// convert Icon to Bitmap
Graphics::TBitmap *Bitmap = new Graphics::TBitmap();
IconList->GetBitmap(0, Bitmap);
IconList->Clear();
// yff ... Save !
TMemoryStream *pMS = new TMemoryStream;
Bitmap->SaveToStream(pMS);
tblMYTABLEICON->LoadFromStream(pMS);
tblMYTABLE->Post();
}
}
//---------------------------------------------------------------------------
|
но это как-то криво.
И изображение искажается — сравните — если вставить иконку
таким способом, или другим: скопировать ее в буфер обмена
(например в ACDSee)
и вставить в DBImage — получается значительная разница.
Значит при вставке из буфера обмена, она как-то конвертиться
по другому ?! И как и в каком формате оно вставляется ?
|
|
Deem |
Отправлено: 15.06.2004, 17:46 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Неужели ему не пофигу?
|
|
Admin |
Отправлено: 15.06.2004, 17:50 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Увы, не пофигу ...
|
|
Admin |
Отправлено: 16.06.2004, 13:15 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Сделал, вид нормальный.
Поскольку делал через ImageList, у него
есть свойства Width и Height, поставил
в них вместо 16 по умолчанию, 32 — все Ок.
|
|
Deem |
Отправлено: 17.06.2004, 09:12 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Так ругался при загрузке из файла? Я думал FB не берет. Или вобще не вьехал.
|
|