Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ресурсы и работа с ними 
:(
    Опции темы
HappyLife
Дата 4.8.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Я не знал, где я могу создать эту тему, но посколько работаю в Билдере, и соответственно использую файлы расширения *.res, создаю тему здесь.

У меня есть файл addition.res, в нем хранятся 250 GIF'ов. Но, пресловутый TImageList и слышать ничего не хочет об этом, ему подавай BMP или ICO. Как быть? Вручную заниматься переконвертацией можно, но это долго. 250 гифов у меня займет часов 5 (с отдыхом).... Стоит ли тратить столько времени на это?

PM MAIL   Вверх
Rrader
  Дата 4.8.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Конвертируй программно.
Код

#include <GIFImg.hpp>
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TGIFImage *G = new TGIFImage();
    G->LoadFromFile("C:\\about.gif");
    Graphics::TBitmap *B = new Graphics::TBitmap();
    B->Assign(G);
    ImageList1->AddMasked(B, clNone);
    delete G;
    delete B;
}



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
HappyLife
Дата 4.8.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Rrader, 
Что такое GIFImg.hpp ?
нет такого.
PM MAIL   Вверх
Rrader
  Дата 4.8.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



У меня в Builder 2007 по дефолту идет... smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
HappyLife
Дата 6.8.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Окей. Будем работать, без автоматического преобразования (и правда, что ресурсы компьютера по напрасну тратить, уж лучше один раз сделать)

Я сохранил все файлы с картинками на жестком диске, поменял у всех файлов размер, и преобразовал их все к BMP.
Можно ли как-нибудь по-быстрому, все эти файлы одним махом закинуть в ресурс?

Добавлено через 41 секунду
Rrader, 
У Вас у самого в подписи написано.
Let's do this quickly!
;)
PM MAIL   Вверх
Rrader
  Дата 6.8.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



 smile 

Добавить в ImageList Можно сразу все 250 картинок - их нужно объединить в одну (в полоску).

А далее функция ImageList_Add. Смотрите в MSDN описание smile 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
HappyLife
Дата 12.8.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Я все же пошел другим путем и добавил все картинки в один ресурс файл.
Они у меня хранятся в категории определенной. Не буду скрывать что это за массив из 250 картинок. Всего навсего фалги 250 стран мира.
Конечная задача, иметь комбо бокс со всеми странами и флажками. 

Каким образом в ImageList загрузить все мои флажки из ресурса?

Пока сделал через ImageList_Add

Но, хочется все же картинки из ресурсов грузить.

Это сообщение отредактировал(а) HappyLife - 12.8.2008, 16:54
PM MAIL   Вверх
HappyLife
Дата 12.8.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Этот метод не работает в силу того что я создал свой собственный тип, дабы не запутаться с чужими ресурсами

Код

bool CALLBACK EnumResNameProc(HMODULE hModule,LPCTSTR lpszType,LPTSTR lpszName,LONG_PTR lParam)
{
    Graphics::TBitmap * bmp = new Graphics::TBitmap();
    bmp->LoadFromResourceName(GetModuleHandle(0),lpszName);
    GenForm->CountryImages->AddMasked(bmp,0);
    delete bmp;
}

//---------------------------------------------------------------------------

void __fastcall TGenForm::LoadCountryImages()
{
    EnumResourceNames(0,"COUNTRIES",(ENUMRESNAMEPROC)EnumResNameProc,0);
}


Это сообщение отредактировал(а) HappyLife - 12.8.2008, 16:19
PM MAIL   Вверх
HappyLife
Дата 13.8.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



Уважаемые форумчане. Помогите решить нетривиальную задачу.

Как узнать ID строки по содержанию ресурса?

Я попытался задействовать  EnumResourceNames с тем чтобы пройтись по всем ресурсам, но вот не задача, 

 EnumResNameProc - не возвращает ID строки!

Код


struct ForResCountry
{
    AnsiString Code;
    int ResID;
};

bool CALLBACK EnumResNameProc(HMODULE hModule,LPCTSTR lpszType,LPTSTR lpszName,LONG_PTR lParam)
{
       ForResCountry * frc = reinterpret_cast<ForResCountry *>(lParam);
        // Но вот незадача, как здесь при совпадении frc->Code узнать ID текущей строки, по причине которой вызван ресурс и вообще как узнать САМУ строку!
        // Ибо lpszName содержит пустую строку!

}
//---------------------------------------------------------------------------
void __fastcall TGenForm::LoadCountryImages()
{
        static ForResCountry frc;
        frc.Code = "USA";
        frc.ResID = 0;    
        EnumResourceNames(0,RT_STRING ,(ENUMRESNAMEPROC)EnumResNameProc,reinterpret_cast<long>(&frc));

       // дальнейшая обработка
}

PM MAIL   Вверх
fridkaratel
Дата 13.8.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

Репутация: нет
Всего: нет



Есть такой вариант ->  smile 

Пробежаться циклом от 1 до 100000

И сравнивать каждую полученную строку с заданной... Если найдена, то break цикл... ;)

Всегда есть замый извращенный вариант smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.