Конференция "WinAPI" » Как заменить иконку? [D6, WinXP]
 
  • Artem (24.01.08 10:51) [20]
    Измененный код:

    s:=ExtractFilePath(ParamStr(0))+application.exename;
    hExe:=LoadLibrary(PChar(S));    
     if (hExe=0) then RaiseLastWin32Error();

     hRes:=FindResource(hExe, MakeIntResource(3), RT_ICON);  
     if (hRes=0) then RaiseLastWin32Error();

     hResLoad:=LoadResource(hExe, hRes);
     if (hResLoad=0) then RaiseLastWin32Error();

     lpResLock:=LockResource(hRes);    
     if (lpResLock=nil) then RaiseLastWin32Error();

     SS:=EXEFileName;
     hUpdateRes:=BeginUpdateResource(PChar(SS), false);
     if (hUpdateRes=0) then RaiseLastWin32Error();

     result:=UpdateResource(hUpdateRes,      
               RT_ICON,                  
               MakeIntResource(3),                  
               LANG_NEUTRAL,
               lpResLock,                  
               SizeofResource(hExe, hRes));
     if result=False then RaiseLastWin32Error();

     EndUpdateResource(hUpdateRes, false);

     FreeLibrary(hExe);



    Пишет, что не найден указанный модуль....
    ??
  • Сергей М. © (24.01.08 11:10) [21]

    > Пишет, что не найден указанный модуль


    Какая строчка вызывает ошибку ?


    > MakeIntResource(3)


    Почему 3 ?
  • Artem (24.01.08 11:16) [22]

    > Какая строчка вызывает ошибку ?


    Не знаю.


    > Почему 3 ?


    Какой надо задать параметр?
  • Сергей М. © (24.01.08 11:19) [23]

    > Не знаю


    Пройдись пошагово отладчиком и узнай.


    > Какой надо задать параметр?


    ID иконки
  • Artem (24.01.08 11:27) [24]

    > ID иконки


    Ее название? У меня "I1" - эта та, на которую надо изменить.
  • Artem (24.01.08 11:31) [25]
    ставлю
    s:=application.exename;

    - вообще ничего не изменяется
  • Сергей М. © (24.01.08 11:32) [26]

    > У меня "I1" - эта та, на которую надо изменить


    Скриншот покажи ..
  • Artem (24.01.08 11:35) [27]
    Скриншот чего? Файла ресурсов?
    И как я его покажу? Здесь нельзя его прикладывать...Могу на мыло скинуть.
  • Сергей М. © (24.01.08 11:36) [28]
    Покажи скриншот икон-ресурсов обоих exe ..
  • Сергей М. © (24.01.08 11:38) [29]

    > Скриншот чего?


    Скриншоты ResExplorer'а, когда ты им просматриваешь exe-файлы (файл твоего приложения и файл приложения, в котором надо заменить иконку)


    > Здесь нельзя его прикладывать


    На то есть slil.ru
  • Artem (24.01.08 11:52) [30]
    http://slil.ru/25393594
    это моего приложения
  • Artem (24.01.08 11:53) [31]
    http://slil.ru/25393597
    в котором надо заменить
  • Сергей М. © (24.01.08 11:54) [32]
    Чудесно.

    А скриншот ресурсов другого exe ?
  • Artem (24.01.08 11:56) [33]
    см.выше
  • Сергей М. © (24.01.08 11:59) [34]
  • Artem (24.01.08 12:04) [35]
    Сейчас пробую...Пишет, что не знает тип TFile - это из какого модуля?
  • Сергей М. © (24.01.08 12:08) [36]

    > не знает тип TFile


    Нафиг он тебе сдался, этот TFile ?
    В примере иконка читается из некоего стороннего файла-контейнера, а у тебя другой случай - ты ее читаешь из своих ресурсов.
  • Artem (24.01.08 12:13) [37]
    Было бы проще. Я бы вынул из ресурса иконку, сохранил ее на диске и запустил приведенную процедуру, присвоив IcoFileName путь к "вынутой" иконке.
  • Artem (24.01.08 12:25) [38]
    Блин, не одно так другое: пишет, что не может создать OUTPUT-файл приложения. Программа не запускается.
    Убрал описание этой процедуры. Все равно.

    Из-за чего это может возникнуть?
  • Сергей М. © (24.01.08 12:25) [39]

    > Я бы вынул из ресурса иконку, сохранил ее на диске


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

    Свою иконку ты успешно считываешь в память ? Этого достаточно.

    А второй этап  - собственно запись считанной в память иконки в ресурс другого exe-модуля.

    Вот и смотри в примере, какова последовательность действий на этом этапе:

    там участвует ресурс RT_GROUT_ICON-ресурс 'MAINICON', не прочитав предварительно который ты не сможешь добраться до ID RT_ICON-ресурса конкретной интересующей тебя иконки
 
Конференция "WinAPI" » Как заменить иконку? [D6, WinXP]
Есть новые Нет новых   [134431   +14][b:0][p:0.001]