Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

IconChanger issue

[es] :: Pascal / Delphi / Kylix :: IconChanger issue

[ Pregleda: 1123 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sky Walker

Član broj: 102549
Poruke: 55



+62 Profil

icon IconChanger issue25.12.2012. u 12:05 - pre 137 meseci
Program snima pogresnu ikonu kada ikona sadrzi vise indeksa u sebi tj vise ikona.
Npr ikona "icon.ico" sadrzi 4 ikone ali program snima pogresan index ikone u exe fajl, ikonu [32x32-4] a treba (u ovom primeru)[32x32-8].

Pravim neki packer i kada treba da promenim ikonu, programi koji imaju vise ikona, cesto dobiju pogresan Icon_Index.

Pokusavam da nadjem na netu neki primer/funkciju koja ce ovo da mi odradi.
Nasao sam preko 40-50 primera u zadnjih par dana ali vecina "upisuju" ikonu u 256 boja ili ne rade...
Imam funkciju koja uspesno snima/vadi ikone iz pe fajla, ali problem dolazi kada ta ikona treba da se dodeli fajlu.

Ako nekom mozda nije jasno, neka pogleda project koji sam okacio i neka proba da upise ikonu (koja se takodje nalazi u
project) u bilo koji exe fajl i videce u cemu je problem...


Ako neko ima volje i malo vremena da prepravi ovaj source (ili ima neki drugi primer) bio bih mu jako zahvalan!

Prikačeni fajlovi
 
Odgovor na temu

Sky Walker

Član broj: 102549
Poruke: 55



+62 Profil

icon Re: IconChanger issue25.12.2012. u 15:52 - pre 137 meseci
Skinuo sam komponentu, kojom bez problema odradjuje ono sto sam hteo i ako i dalje nisam siguran kako... :)
Ako moderator zeli moze da obrise temu jer ne verujem da ce biti nekom od koristi...
Poz.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: IconChanger issue26.12.2012. u 06:03 - pre 137 meseci
Evo ovako će tema biti od koristi :)

Ovako može da se kopira pojedinačna ikona...


Code (delphi):

function CopyIcon(srcicon : PChar; destIcon : PChar; Index: integer) : Boolean;
var hFile  : Integer;
    id     : ICONDIR;
    ide    : ICONDIRENTRY;
    uRead  : DWord;
    nSize  : DWord;
    pvFile : PByte;
    dFile  : Integer;
    i: Integer;
begin
  result := False;
  hFile := CreateFile(srcicon, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile > 0 then
  begin
    ReadFile(hFile, id, sizeof(id), uRead, nil);
    for I := 2 to Index do
      if Index <= id.idCount then
      begin
        ReadFile(hFile, ide, sizeof(ICONDIRENTRY), uRead, nil);
        id.idEntries := ide;
      end;

    nSize := id.idEntries.common.dwBytesInRes;

    GetMem(pvFile, nSize);
    SetFilePointer(hFile, id.idEntries.dwImageOffset, nil, FILE_BEGIN);
    ReadFile(hFile, pvFile^, nSize, uRead, nil);
    CloseHandle(hFile);

    dFile := CreateFile(destIcon, GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    if dFile > 0 then
    begin
      id.idCount := 1;
      id.idEntries.dwImageOffset := sizeof(ICONDIR);
      WriteFile(dFile, id, sizeof(id), uRead, nil);
      WriteFile(dFile, pvFile^, nSize, uRead, nil);
      CloseHandle(dFile);
      result := True;
    end;

    FreeMem(pvFile);
  end;
end;
 

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: IconChanger issue

[ Pregleda: 1123 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.