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

Вниз

В чём разница между S1 и S2 в данном фрагменте?   Найти похожие ветки 

 
Knight ©   (2003-11-25 18:05) [40]

>> Игорь Шевченко © (25.11.03 17:59) [39]
> Про мышку пытал форум, а потом цель выяснилась.
Ну там-то сразу было понятно, что не для дела... :)

А тут всё серьёзно, если комп раньше не разнесу из-за таких вот приколов с функциями, то исходники выложу. Ведь ещё вчера была мысль, что всё дело в Win2k, но как-то сбила с толку, частичная работоспособность функции.


 
Knight ©   (2003-11-25 18:09) [41]

Удалено модератором
Примечание: Offtopic


 
Reindeer Moss Eater ©   (2003-11-25 21:26) [42]

{.$DEFINE FROM_EXECUTABLE}
{.$DEFINE I_BELEIVE_IN_WIN32APIHELP}
procedure TForm1.Button1Click(Sender: TObject);
var i:Word; s : string; h:HICON;
begin
i:=0;
{$IFDEF FROM_EXECUTABLE}
s:=Application.ExeName;
{$ELSE}
SetLength(s,MAX_PATH);
StrPCopy(PChar(s),"C:\Program Files\Borland\Delphi5\readme.txt");
{$ENDIF}
H:=ExtractAssociatedIcon(0,PChar(s),i);
{$IFDEF I_BELEIVE_IN_WIN32APIHELP}
if H = 0 then
begin
Image1.Picture.Icon.Handle:=i;
ShowMessage("Assosiated executable file is :" + Trim(PChar(s)));
end
else
Image1.Picture.Icon.Handle:=H;
{$ELSE}
if H > 0 then
Image1.Picture.Icon.Handle:=H
else
ShowMessage(Format("GetLastError = %d",[GetLastError]));
{$ENDIF}
end;


 
Reindeer Moss Eater ©   (2003-11-25 21:41) [43]

А разные результаты в разных Windows потому что

uses ShellApi;

unit ShellApi.pas

...
shell32 = "shell32.dll";
...

Реализация иными словами разная у ExtractAssociatedIcon.
Код выше рожден на XP.


 
Knight ©   (2003-11-25 23:30) [44]

>> Reindeer Moss Eater © (25.11.03 21:26) [42]
Класс! Хоть и через ...., но заработало и в Win2k! :)


procedure TForm1.Button1Click(Sender: TObject);
var I:Word;
buff:Array[0..MAX_PATH] of Char;
S2:String;
begin
I:=0;
S2:="D:\";
StrPCopy(buff,S2);
Image1.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,buff,I);
end;


Осталось, разобраться как получить иконку для типа файла, если сам файл не доступен... Попробовал напрямую, но никаких ассоциаций у системы это не вызвало.


 
Knight ©   (2003-11-26 12:25) [45]

Удалено модератором
Примечание: Создание пустых сообщений. Не надо


 
Knight ©   (2003-11-26 13:02) [46]

> Удалено модератором
> Примечание: Создание пустых сообщений. Не надо
Знаю, что не надо, но ведь как-то поднять в начало треба, а то совсем забудется...


 
Игорь Шевченко ©   (2003-11-26 13:03) [47]

Knight © (26.11.03 13:02)

Тебе не кажется, что активное привлечение внимания к своей персоне может повлечь прямо противоположный результат ?


 
Knight ©   (2003-11-26 17:00) [48]

Если эта тема уйдёт далеко, значит ответ найден...


 
clickmaker ©   (2003-11-26 17:04) [49]


> Knight © (26.11.03 17:00) [48]

Найдешь ответ и в кусты? Так нам же тоже интересно чем твой mortal combat c win2k закончиться?


 
Knight ©   (2003-11-26 19:43) [50]

Удалено модератором


 
Knight ©   (2003-11-27 12:23) [51]

Ну раз больше идей нет, то сделал через реестр. Может кому пригодится... можно передавать расширение или тип:
расширение - ".xxx" (".txt", ".z" и т.п.)
тип - "type" ("folder", "drive" и т.п.)

Если иконка не найдена, то если Default:
true - то берётся стандартная;
false - результат 0;


function GetFileIcon(sFileType:String; Default:Boolean):HICON;
var FT, V, FN, N: string;
i, P: Integer;
R: TRegistry;
begin
Result:=0;
FT:="";
R:=TRegistry.Create;
try
if sFileType<>"" then begin
R.RootKey:=HKEY_CLASSES_ROOT;
if sFileType[1]="." then begin
if R.OpenKey(sFileType, False) then begin
FT:=R.ReadString("");
R.CloseKey;
end;
end else FT:=sFileType;
if (FT<>"") and R.OpenKey(FT+"\DefaultIcon", False) then begin
V:=R.ReadString("");
R.CloseKey;
end;
end;
if (V="") and Default then V:="shell32.dll,0";
finally
R.Free;
end;
if V<>"" then begin
while Pos(""",V)<>0 do Delete(V,Pos(""",V),1);
P:=pos(",",V);
if P<>0 then begin
FN:=copy(V,1,P-1);
N:=copy(V,P+1,length(V)-P);
if N[1]="-" then Delete(N,1,1);
i:=StrToIntDef(N,0)
end else begin
FN:=V;
i:=0;
end;
if FN<>"" then Result:=ExtractIcon(hInstance,PChar(FN),i);
end;
end;


PS: Приму любые советы по улучшению :)


 
jack128 ©   (2003-11-27 12:55) [52]


> Осталось, разобраться как получить иконку для типа файла,
> если сам файл не доступен...

Создать файл с нужным расширением
использовать ExtractAssociatedIcon
Удалить файл


 
Knight ©   (2003-11-27 13:04) [53]

>> jack128 © (27.11.03 12:55) [52]
Супер... истино, говорят, что если бы строители строили как программисты пишут программы, то первый же, заполший из леса муравей, разрушил бы цивилизацию... :)

PS: Даже если предложений по улучшению не будет, все-равно всем ОГРОМНОЕ СПАСИБО за помощь. :)


 
Reindeer Moss Eater ©   (2003-11-27 13:06) [54]

В первоисточнике не муравей из леса, а пролетающий дятел


 
clickmaker ©   (2003-11-27 13:12) [55]

А я так и не понял, чем тя SHGetFileInfo не устроило. Насчет несуществующего файла, почитай внимательно про параметр pszPath и флажок SHGFI_USEFILEATTRIBUTES


 
Knight ©   (2003-11-27 14:37) [56]

>> clickmaker © (27.11.03 13:12) [55]
Да я чё-то почитал, почитал, попробовал, попробовал, а ничего не вышло. Плюнул и написал своё.


 
jack128 ©   (2003-11-27 14:42) [57]


> Knight © (27.11.03 13:04) [53]

А по конкретней, чем тя мой вариант не устраивает?


 
Knight ©   (2003-11-27 17:03) [58]

>> jack128 © (27.11.03 14:42) [57]
> А по конкретней, чем тя мой вариант не устраивает?

Один файл - хорошо,
Два - хорошо...
а если несколько сотен?

Конечно, можно делать кэш... но мне это надо?


 
Knight ©   (2003-11-27 17:10) [59]

>> jack128 © (27.11.03 14:42) [57]
А, например, в папке System32 их более 2 тысяч...


 
Игорь Шевченко ©   (2003-11-27 19:06) [60]

Knight © (27.11.03 17:10)

Ты бы хоть рассказал народу, зачем оно тебе надо? А то ведешь себя, как партизан, которого в гестапо пытают. Чем яснее будет условие задачи, тем рациональнее (и быстрее) тебе могут предложить способ. Или просто пофлеймить захотелось ? ;)



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

Текущий архив: 2003.12.19;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.022 c
14-62212
SkyRanger
2003-11-20 08:42
2003.12.19
Немного о политике...


1-62095
killer
2003-12-08 22:20
2003.12.19
Можно ли какнибудь в exe-файл впихнуть другие файлы?


1-62108
Андрей Пономарев
2003-12-08 15:02
2003.12.19
Експлорер


4-62334
BoxTer
2003-10-27 07:05
2003.12.19
TerminateProcess не работает ;-)


6-62184
Denis_Ac
2003-10-23 07:40
2003.12.19
Что такое?