Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
1-1098965360
FenixGold
2004-10-28 16:09
2004.11.14
Работа с таблицами


3-1098064145
sanek
2004-10-18 05:49
2004.11.14
Как решить проблемму с вводом данных в поле string(254)


3-1097914633
arick
2004-10-16 12:17
2004.11.14
Проблема в подключении TSQLConnection (dbExpress)


8-1092301028
tarantino
2004-08-12 12:57
2004.11.14
видеопоток из устройст ввода видео


1-1099231595
Валерий
2004-10-31 17:06
2004.11.14
Application.Terminate;