Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Как поменять иконку программы   Найти похожие ветки 

 
acsoft ©   (2004-10-27 17:46) [0]

Тут недавно обсуждался этот вопрос, но вроде так и не решили проблемы. А меня заинтересовало.
Фрагмент программы:

procedure TForm1.Button1Click(Sender: TObject);
var
  hExe: THANDLE;
  hResLoad:THandle;
  hRes: THandle;
  lpResLock: PChar;
  res:cardinal;
begin
try
  hRes:=FindResource(application.Handle,"MAINICON",RT_GROUP_ICON);
  hResLoad:=LoadResource(application.Handle, hRes);
  lpResLock:=LockResource(hResLoad);

  res:=beginupdateresource("test.exe",true);
  updateresource(res,RT_GROUP_ICON,"MAINICON",0,lpResLock,SizeofResource(application.Handle, hRes));
  endupdateresource(res,false);
except
end;
end;

То есть хочу заменить иконку тестовой программы (test.exe), на иконку своей.
Но здесь что-то не так - после выполнения процедуры у тестовой программы вообще начисто сносятся все ресурсы, а в моей программе возникает ошибка, о которой винда заявляет только после выхода из программы.
Все затыкается на процедуре LockResource(hResLoad) - никак не может Lock этот самый Resource

1)Соответственно, MAINICON есть в обеих программах.
2)Замена RT_GROUP_ICON на RT_ICON в любых комбинациях не помогает
3)Попытка использовать не ресурсы своей программы, а какой-нибудь посторонней тоже не решает проблем


 
acsoft ©   (2004-10-27 20:44) [1]

...


 
Rouse_ ©   (2004-10-27 21:06) [2]

Вот тебе примерчик.
Что делает, помещает в ехе текстовый ресурс с датой модификации и базу данных...
function AddRes(const ResDB, EXE: String; Delete: Boolean = True): Boolean;
var
 hFile: HWND;
 F: TFileStream;
 Buf: array of Byte;
 Ini: TextFile;
begin
 Result := False;
 AssignFile(Ini, "C:\ini.tmp");
 Rewrite(Ini);
 Write(Ini, DateToStr(Now) + ".mdb");
 CloseFile(Ini);

 hFile := BeginUpdateResource(PChar(EXE), False);
 try
   if hFile = 0 then Exit;
   F := TFileStream.Create("C:\ini.tmp", fmOpenRead);
   try
     SetLength(Buf, F.Size);
     F.Position := 0;
     F.Read(Buf[0], F.Size);
     Result := UpdateResource(hFile, "INSTALL", "RES_INI",
       0, @Buf[0], F.Size);
     if not Result then Exit;
     SetLength(Buf, 0);
   finally
     F.Free;
   end;

   F := TFileStream.Create(ResDB, fmOpenRead);
   try
     SetLength(Buf, F.Size);
     F.Position := 0;
     F.Read(Buf[0], F.Size);
     Result := UpdateResource(hFile, "INSTALL", "RES_MDB",
       0, @Buf[0], F.Size);
     if not Result then Exit;
     SetLength(Buf, 0);
     Result := True;
   finally
     F.Free;
   end;

 finally
     if FileExists("C:\ini.tmp") then DeleteFile("C:\ini.tmp");
   if Delete then
     if FileExists(ResDB) then DeleteFile(ResDB);
   EndUpdateResource(hFile, False);
 end;
end;


 
GuAV ©   (2004-10-27 21:39) [3]

acsoft ©   (27.10.04 17:46)
тестовой программы вообще начисто сносятся все ресурсы


А что собственно Вы хотели ?

HANDLE BeginUpdateResource(          LPCTSTR pFileName,
   BOOL bDeleteExistingResources
);

...
bDeleteExistingResources
[in] Specifies whether to delete the pFileName parameter"s existing resources. If this parameter is TRUE, existing resources are deleted and the updated executable file includes only resources added with the UpdateResource function.



> application.Handle

При чём тут окно ? Вы вообще пробовали если не Ctrl+Click то хотя бы F1:
Use Handle when calling Windows API functions that require a parent window handle.
А тут нужен хэндл модуля.

acsoft ©   (27.10.04 20:44) [1]
а какой-нибудь посторонней

Интересно а как Вам удалось "достучатся" до application сторонней программы ? нет ну в прынципе можно...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
1-1098787117
Андерсон
2004-10-26 14:38
2004.11.14
HelpFile


3-1097640948
diabolik_krsk
2004-10-13 08:15
2004.11.14
Создание ADOConnection во время прогона программы


14-1098796698
oldman
2004-10-26 17:18
2004.11.14
Вот нашел такую задачку :)))


4-1096743336
Sphinx
2004-10-02 22:55
2004.11.14
Блокировка сочетаний клавиш


1-1098971775
Константинов
2004-10-28 17:56
2004.11.14
Как выделить часть текста в StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский