dvv |
Отправлено: 26.02.2006, 08:59 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
Модуль приложения не имеет формы. В нем руками описываются объекты, которые будут создаваться динамически. Один из объектов TImageList. Я хочу что-бы объект создавался динамически, а список изображений хранился внутри приложения. Это нужно для того, что бы не таскать за готовым приложением кучу иконок.
Эта задача прекрасно решается если приложение имеет стандартную форму. В этом случае объекты, которые содержатся на форме описаны в файле .DSK. Там прописываются свойства, которые мы определяем в инспекторе объектов.
Могу ли я каким-либо способом указать своему приложению, что бы он загружал картинки для объекта TImageList из .DSK-файла?
Отредактировано dvv — 26/02/2006, 09:00 |
|
Grigoriy |
Отправлено: 26.02.2006, 14:29 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
У TImageList есть свойства
ImageList1->Add(TBitmap* Image, TBitmap* Mask);
ImageList1->AddIcon(TIcon* Image);
ImageList1->AddImages(TCustomImageList* value);
ImageList1->AddMasked(TBitmap* Image, TColor MaskColor);
ImageList1->Insert(int Index, TBitmap* Image, TBitmap* Mask);
ImageList1->InsertIcon(int index, TIcon* Image);
ImageList1->Delete(int);
|
|
dvv |
Отправлено: 28.02.2006, 22:42 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
Или я что — то не так понимаю?
Мне нужно в приложении описать иконку. Описать какими-то кодами.
Эти коды должны быть, скорее всего, текстовыми.
Например так:
CODE |
// ну как-то так, чтобы изображение картинки
//закодировать текстом, именно текстом!
TBitmap* Image="01f4550084fa741...";
|
И лишь только после этого использовать методы
ImageList1->Add(Image);
|
|
Grigoriy |
Отправлено: 01.03.2006, 00:28 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (dvv @ 28/02/2006, 22:42) |
TBitmap* Image="01f4550084fa741...";
|
Бред дохлого зайца...
Опять мне надо думать.
Эй кто-то может прямо сейчас ответить ?
|
|
Rius |
Отправлено: 01.03.2006, 06:39 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
чем не подходит хранение изображений в ресурсах программы???
текстовое представление увеличит обьем данных в 2 раза.
|
|
dvv |
Отправлено: 06.03.2006, 07:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 43
|
QUOTE | чем не подходит хранение изображений в ресурсах программы??? |
Если можно подробнее, пожалуйста.
Как из изображения получить текстовый код?
Как потом этот код присвоить TBitmap* Image=? |
|
olegenty |
Отправлено: 06.03.2006, 07:16 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
поиск рулит. обсуждалось N раз, где N> 100.
|
|
Grigoriy |
Отправлено: 06.03.2006, 13:46 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (olegenty @ 06/03/2006, 07:16) | поиск рулит. обсуждалось N раз, где N > 100. |
сегодня буду заниматься этим вопросом.
|
|
Grigoriy |
Отправлено: 10.03.2006, 08:15 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
И так покаместь первый вариант решения задачи уже есть.
Функция возвращает указатель на объект класса TImage.
CODE |
Graphics::TBitmap* GetTextImage(AnsiString str, TFontCharset Charset1,TColor color1, int sizefont1, TFontStyles Stylef1, TFontName Namef1, TFontPitch Pitch1, TColor bkc, int &w, int &h)
{
tagSIZE s;
Graphics::TBitmap* a = new Graphics::TBitmap;
a->Canvas->Font->Color=color1;
a->Canvas->Font->Charset=Charset1;
a->Canvas->Font->Size=sizefont1;
a->Canvas->Font->Style=Stylef1;
a->Canvas->Font->Name=Namef1;
a->Canvas->Font->Pitch=Pitch1;
s=a->Canvas->TextExtent(str);
a->Canvas->Brush->Color=bkc;
a->Canvas->Brush->Style=bsSolid;
a->Width=s.cx;
a->Height=s.cy;
w=a->Width;
h=a->Height;
a->PixelFormat=pf32bit;
a->Canvas->Rectangle(0,0,a->Width,a->Height);
a->Canvas->TextOutA(0,0,str);
//a->HandleType=bmDIB;
return a;
};
|
Поясняю.
str — строка текста, изображение которой нужно получить
Charset1 — набор символов (может быть DEFAULT_CHARSET)
color1 — цвет выводимых символов
sizefont1 — размер шрифта в пунктах (1/72 дюйма)
Stylef1 — стиль шрифта
Namef1 — имя шрифта
Pitch1 — способ расположения букв в тексте
bkc — цвет фона изображения
w — возвращаемая ширина изображения
h — возвращаемая высота изображения
Функция возвращает указатель на объект класса TBitmap, который хранит изображение. А так же возврашается ширина и высота изображения.
Я проверял работу функции на примере
CODE |
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
int w1,h1;
Graphics::TBitmap* bt1;
TFontStyles fs;
fs.Clear();
bt1=GetTextImage( "Изображение текста",DEFAULT_CHARSET,255*255,50,fs,"Times New Roman",fpVariable,255,w1,h1);
ImageList1->Height=h1;
ImageList1->Width=w1;
Image1->Width=w1;
Image1->Height=h1;
ImageList1->Add(bt1,0);
delete bt1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
ImageList1->GetBitmap(0,Image1->Picture->Bitmap);
}
|
Вроде не глючит...
Но вопрос в том, в каком объекте "должно быть изображение" ?
Кроме объекта TBitmap есть ещё объект TIcon.
|
|
Grigoriy |
Отправлено: 10.03.2006, 08:18 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
И так покаместь первый вариант решения задачи уже есть.
Функция возвращает указатель на объект класса TImage.
CODE |
Graphics::TBitmap* GetTextImage(AnsiString str, TFontCharset Charset1,TColor color1, int sizefont1, TFontStyles Stylef1, TFontName Namef1, TFontPitch Pitch1, TColor bkc, int &w, int &h)
{
tagSIZE s;
Graphics::TBitmap* a = new Graphics::TBitmap;
a->Canvas->Font->Color=color1;
a->Canvas->Font->Charset=Charset1;
a->Canvas->Font->Size=sizefont1;
a->Canvas->Font->Style=Stylef1;
a->Canvas->Font->Name=Namef1;
a->Canvas->Font->Pitch=Pitch1;
s=a->Canvas->TextExtent(str);
a->Canvas->Brush->Color=bkc;
a->Canvas->Brush->Style=bsSolid;
a->Width=s.cx;
a->Height=s.cy;
w=a->Width;
h=a->Height;
a->PixelFormat=pf32bit;
a->Canvas->Rectangle(0,0,a->Width,a->Height);
a->Canvas->TextOutA(0,0,str);
//a->HandleType=bmDIB;
return a;
};
|
Поясняю.
str — строка текста, изображение которой нужно получить
Charset1 — набор символов (может быть DEFAULT_CHARSET)
color1 — цвет выводимых символов
sizefont1 — размер шрифта в пунктах (1/72 дюйма)
Stylef1 — стиль шрифта
Namef1 — имя шрифта
Pitch1 — способ расположения букв в тексте
bkc — цвет фона изображения
w — возвращаемая ширина изображения
h — возвращаемая высота изображения
Функция возвращает указатель на объект класса TBitmap, который хранит изображение. А так же возврашается ширина и высота изображения.
Я проверял работу функции на примере
CODE |
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
int w1,h1;
Graphics::TBitmap* bt1;
TFontStyles fs;
fs.Clear();
bt1=GetTextImage( "Изображение текста",DEFAULT_CHARSET,255*255,50,fs,"Times New Roman",fpVariable,255,w1,h1);
ImageList1->Height=h1;
ImageList1->Width=w1;
Image1->Width=w1;
Image1->Height=h1;
ImageList1->Add(bt1,0);
delete bt1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
ImageList1->GetBitmap(0,Image1->Picture->Bitmap);
}
|
Вроде не глючит...
Но вопрос в том, в каком объекте "должно быть изображение" ?
Кроме объекта TBitmap есть ещё объект TIcon.
|
|
|