** Monster |
Отправлено: 17.11.2003, 11:28 |
|
Не зарегистрирован
|
Как правильно взять иконки из ехе файла.
Уменьшить их до 15х15 например.
И засунуть в ListBox? |
|
Admin |
Отправлено: 17.11.2003, 19:26 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Бросьте на форму компоненты
Button1, OpenDialog1, ListBox1, ImageList1, Image1
Установите у компонента ListBox1
свойство Style = lbOwnerDrawFixed
и например ItemHeight = 20
CODE |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
int ni;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char buff[1024];
if(OpenDialog1->Execute()){
strcpy(buff,OpenDialog1->FileName.c_str());
TIcon *Icon = new TIcon;
Icon->Handle = ExtractIcon(HInstance, buff ,0);
if(Icon->Handle == NULL){ WORD lpi;
Icon->Handle = ExtractAssociatedIcon(HInstance, buff ,&lpi);
}
ni = ImageList1->AddIcon(Icon);
Image1->Picture->Assign(Icon);
delete Icon; Icon = NULL;
ListBox1->Items->Add(buff);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
TIcon *Icon = new TIcon;
ImageList1->GetIcon(Index, Icon);
ListBox1->Canvas->Draw(Rect.Left+2, Rect.Top+2, Icon);
ListBox1->Canvas->TextOut(Rect.Left+2+Icon->Width,
Rect.Top+2, ListBox1->Items->Strings[Index]);
delete Icon; Icon = NULL;
}
//---------------------------------
|
Отредактировано Admin — 17/11/2003, 20:32
|
|
** Monster |
Отправлено: 18.11.2003, 15:43 |
|
Не зарегистрирован
|
Спасибо. Супер! |
|
** Monster |
Отправлено: 18.11.2003, 17:30 |
|
Не зарегистрирован
|
Вот только не пойму она каждый раз вниз добавляет.
А мне надо заново весь листбокс перерисовать.
Как бы это сделать? |
|
Admin |
Отправлено: 18.11.2003, 22:40 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Если предварительно очистить, то
CODE |
ListBox1->Items->Clear();
ListBox1->Items->Add(buff);
|
если встать на первую запись, то
CODE |
ListBox1->ItemIndex = 0; // встать на первую запись
|
Также можно считать/установить текущую верхнюю
отражаемую строку в ListBox:
CODE |
ListBox1->TopIndex = 0;
|
|
|
** Monster |
Отправлено: 19.11.2003, 10:04 |
|
Не зарегистрирован
|
Всё получилось.
ListBox1->Items->Clear();
ListBox1->Items->Add(buff);
Это я в курсе.
Нужно ещё и ListBox2->Clear(); чистить было.
Спасибо!!! |
|
** Monster |
Отправлено: 19.11.2003, 10:06 |
|
Не зарегистрирован
|
Вернее
ImageList->Clear();
))
|
|