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

Вниз

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

 
Knight   (2003-11-25 14:58) [0]

Если S1=S2...


procedure TForm1.Button1Click(Sender: TObject);
var I:Word;
S1,S2:String;
P:PChar;
begin
I := 1;
S1:=ExtractFilePath(Application.ExeName);
S2:="D:\complete\Borland\Delphi5\Projects\";
if S1=S2 then begin
P:=PChar(S1);
Image1.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);
P:=PChar(S2);
Image2.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);
end;
end;


В первом иконка есть, а во втором нет... меняю
S2:=ExtractFilePath(Application.ExeName);
S1:="D:\complete\Borland\Delphi5\Projects\";
В первом иконки нет, а во втором есть... %)


 
Reindeer Moss Eater   (2003-11-25 15:14) [1]

Второй параметр должен быть полным путем к файлу.

Но:
If the icon handle is obtained from an executable file, the function stores the full path and filename of that executable in the string pointed to by lpIconPath.

То есть после первого вызова функции в переменной на которую указывает P будет правильное значение параметра и наступает успех


 
Knight   (2003-11-25 15:50) [2]

Reindeer Moss Eater © (25.11.03 15:14) [1]

Но ведь S1=S2... И если делаю S2:=S1 то иконки грузятся в оба имиджа, а если S1:=S2, то оба остаются пустыми.


 
Reindeer Moss Eater   (2003-11-25 15:54) [3]

Это только на момент выполнения if"а эти строки равны.
После первого вызова
Image1.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);

в строке, на которую указывает P будет the full path and filename of that executable

После чего второй вызов будет успешным.

PS: информация о чуде получена из открытых источников


 
Danilka   (2003-11-25 16:00) [4]

причем, если почитать о том, что из себя представляет string в дельфи, то можно легко понять, почему это происходит. :))


 
Reindeer Moss Eater   (2003-11-25 16:03) [5]

И если делаю S2:=S1 то иконки грузятся в оба имиджа, а если S1:=S2, то оба остаются пустыми.

После первого вызова в S1 находится полное имя exe.
А в S2 только путь до него.


 
Knight   (2003-11-25 16:06) [6]

Хорошо, пример 2...

procedure TForm1.Button1Click(Sender: TObject);
var I:Word;
S1,S2,S3:String;
P:PChar;
begin
I := 1;
S1:=Edit1.Text;
S2:="D:\";
S3:=ExtractFileDrive(Application.ExeName)+"\";
if (S1=S2) and (S1=S3)then begin
P:=PChar(S1);
Image1.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);
P:=PChar(S2);
Image2.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);
P:=PChar(S3);
Image3.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);
end;
end;


Изображения в Image1 и 3, а 2 пустое...


 
Reindeer Moss Eater   (2003-11-25 16:12) [7]

S1:=Edit1.Text;

P:=PChar(S1);

Все отличие в том, что в PChar преобразовано СВОЙСТВО компонента, а не переменная.

Что происходит когда винда пытается работать методом по чтению у свойства вместо переменной памяти предположить трудно.
Ясно только одно - это у нее не получается


 
Reindeer Moss Eater   (2003-11-25 16:19) [8]

После 2 вызова в s2 будет fullname, но иконки в image2 не будет ибо параметр был неверен при вызове.

Третий вызов успешен скорее всего потому, что S3 и S2 компилятор посчитал одной строкой имеющей счетчик ссылок = 2


 
Knight   (2003-11-25 16:23) [9]

Так кто-нибудь скажет, как с этим бороться?


 
Reindeer Moss Eater   (2003-11-25 16:24) [10]

С чем бороться-то?


 
Reindeer Moss Eater   (2003-11-25 16:36) [11]

А вообще странные у тебя какие-то примеры.
Чем-то на брайнбэнчевские приколы похожи....


 
Knight   (2003-11-25 16:37) [12]

Просто первый раз втречаю, что при
function ExtractAssociatedIcon(hInst: HINST; lpIconPath: PChar;
var lpiIcon: Word): HICON; stdcall;
не работает ExtractAssociatedIcon(HInstance,"D:\",I);


 
Knight   (2003-11-25 16:40) [13]

>> Reindeer Moss Eater © (25.11.03 16:36) [11]
> А вообще странные у тебя какие-то примеры.
> Чем-то на брайнбэнчевские приколы похожи....
Почему странные?
ExtractAssociatedIcon(HInstance,"D:\",I)... не сработало, стал пробовать разные варианты, в поиске рабочих.


 
Игорь Шевченко   (2003-11-25 16:40) [14]

Knight © (25.11.03 16:37)

И не должно работать. ПРОЧИТАЙ HELP. Три раза. Наизусть.


 
Reindeer Moss Eater   (2003-11-25 16:41) [15]

А почему оно должно работать если

lpIconPath

Points to a string that specifies the full path and filename of the file for which an icon is desired. The function extracts the icon handle from that file, or from an executable file associated with that file.
If the icon handle is obtained from an executable file, the function stores the full path and filename of that executable in the string pointed to by lpIconPath.


 
clickmaker   (2003-11-25 16:42) [16]


> Knight © (25.11.03 16:40) [13]
> ExtractAssociatedIcon(HInstance,"D:\",I)... не сработало,
> стал пробовать разные варианты, в поиске рабочих.

Тут нужно SHGetFileInfo


 
Knight   (2003-11-25 17:16) [17]

>> clickmaker © (25.11.03 16:42) [16]
> Тут нужно SHGetFileInfo
Это работает без проблем, только мне нужно иконка ассоциироввая с типом вообще, даже если файл не доступен. Сказали, что ExtractAssociatedIcon должна это делать. А она не работает.

Так как ей данные передать если
---------------
S:String;
P:PChar;
---------
S:="D:\";
P:=PChar(S);
Image1.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);

--------------

не работает?


 
Knight   (2003-11-25 17:17) [18]

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


 
Reindeer Moss Eater   (2003-11-25 17:19) [19]

И все сначала.
Второй параметр должен быть полным путем к файлу.


 
clickmaker   (2003-11-25 17:20) [20]

MSDN - SHGetFileInfo

pszPath
Address of a buffer that contains the path and file name. Both absolute and relative paths are valid.
If the uFlags parameter includes the SHGFI_PIDL flag, this parameter must be the address of an ITEMIDLIST (PIDL) structure that contains the list of item identifiers that uniquely identifies the file within the shell"s namespace. The PIDL must be a fully qualified PIDL. Relative PIDLs are not allowed.

If the uFlags parameter includes the SHGFI_USEFILEATTRIBUTES flag, this parameter does not have to be a valid file name. The function will proceed as if the file exists with the specified name and with the file attributes passed in the dwFileAttributes parameter. This allows you to obtain information about a file type by passing just the extension for pszPath and passing FILE_ATTRIBUTE_NORMAL in dwFileAttributes.


 
Knight   (2003-11-25 17:22) [21]

К какому файлу?
Это разве не полный путь?

S2:="D:\complete\Borland\Delphi5\Projects\Project1.exe";


 
Reindeer Moss Eater   (2003-11-25 17:24) [22]

Этот путь - полный.
А ты на пути в своих примерах выше посмотри.


 
Knight   (2003-11-25 17:26) [23]

>> Reindeer Moss Eater © (25.11.03 17:24) [22]
> Этот путь - полный.
Так он тоже не работает...


 
Reindeer Moss Eater   (2003-11-25 17:28) [24]

А GetLastError отменили из-за событий в Грузии?


 
Reindeer Moss Eater   (2003-11-25 17:30) [25]

S2:="D:\complete\Borland\Delphi5\Projects\Project1.exe";
C коротким вариантом имени тоже не работает?


 
Reindeer Moss Eater   (2003-11-25 17:33) [26]

И кроме второго параметра есть еще и третий, который тоже должен быть правильным.


 
Knight   (2003-11-25 17:34) [27]

GetLastError=6 - ERROR_INVALID_HANDLE
Причём и если в случае если
S2:="D:\complete\Borland\Delphi5\Projects\Project1.exe";
и
S2:=Application.ExeName;

но в первом иконки нет, а во втром есть...


 
Reindeer Moss Eater   (2003-11-25 17:35) [28]

LPWORD lpiIcon // pointer to icon index

lpiIcon

Points to a WORD that specifies the index of the icon whose handle is to be obtained.
If the icon handle is obtained from an executable file, the function stores the icon"s identifier in the WORD pointed to by lpiIcon.

Короче назад, к истокам, в автошколу.
Учиться учиться и учиться


 
Knight   (2003-11-25 17:37) [29]

>> Reindeer Moss Eater © (25.11.03 17:30) [25]
> S2:="D:\complete\Borland\Delphi5\Projects\Project1.exe";
> C коротким вариантом имени тоже не работает?
Так оно и так короткое в пределаж 8.3 и идентична Application.ExeName;


 
Reindeer Moss Eater   (2003-11-25 17:38) [30]

Причём и если в случае если
S2:="D:\complete\Borland\Delphi5\Projects\Project1.exe";
и
S2:=Application.ExeName;

но в первом иконки нет, а во втром есть...


Про случай повторного вызова я просто уже замучался повторять тебе одно и то же.


 
Knight   (2003-11-25 17:41) [31]

Какого повторного?
Один случай...


procedure TForm1.Button1Click(Sender: TObject);
var I:Word;
S:String;
P:PChar;
begin
I := 1;
// S:="D:\COMPLETE\Borland\Delphi5\Projects\Project1.exe";
S:=Application.Exename;
P:=PChar(S);
Image2.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,P,I);
end;



 
Игорь Шевченко   (2003-11-25 17:43) [32]

Knight © (25.11.03 17:41)

Есть предложение: Давай ты свои приколы будешь писать самостоятельно, изучая help, MSDN и прочие источники. Отладчиком пользоваться, в том числе.


 
Knight   (2003-11-25 17:45) [33]

Сутки уже всем пользуюсь, все переменные через отладчик прогнал разница только в результате либо есть, либо нет... поэтому и в форум полез, думал, может тут объяснят.


 
Knight   (2003-11-25 17:47) [34]

>> Игорь Шевченко © (25.11.03 17:43) [32]
> Есть предложение: Давай ты свои приколы
И никаких приколов, рабочая прога, нужно до коммандировки (начало декабря) закончить.


 
Reindeer Moss Eater   (2003-11-25 17:47) [35]

Нормально блин.
Оказывается мы тут в фантики играли, а не объяснили....


 
Knight   (2003-11-25 17:51) [36]

>> Reindeer Moss Eater © (25.11.03 17:47) [35]
> Нормально блин.
> Оказывается мы тут в фантики играли, а не объяснили....
Да я не о том, спасибо за помощь... :)
Так всё равно не работает... :(

Щас ещё под Win98 попробую.


 
Knight   (2003-11-25 17:55) [37]

Вот.... под 98-ым работает нормально. :(


 
Knight   (2003-11-25 17:57) [38]

Под 98-ым работает даже так...

Image2.Picture.Icon.Handle:=ExtractAssociatedIcon(HInstance,"D:\",I);

Поубывал бы...


 
Игорь Шевченко   (2003-11-25 17:59) [39]

Knight © (25.11.03 17:47)


> И никаких приколов, рабочая прога, нужно до коммандировки
> (начало декабря) закончить.


Это ты прокурору расскажешь, он такие истории любит.

Про мышку пытал форум, а потом цель выяснилась.


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

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

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



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

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

Наверх





Память: 0.54 MB
Время: 0.007 c
1-62111
Vetal
2003-12-05 17:22
2003.12.19
Не работает связка Делфи<->СОМ-объект написанный на Visual Basic


3-61913
rosl
2003-11-27 13:29
2003.12.19
opendialog


3-61929
alst
2003-11-27 08:42
2003.12.19
Удаление записи из БД Interbse.


14-62209
SPeller
2003-11-25 14:28
2003.12.19
Глюк со звуком в играх под ХР


3-61927
ksan
2003-11-28 09:31
2003.12.19
просмотр RDB$





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский