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

Вниз

PWideChar   Найти похожие ветки 

 
Nickolay   (2002-05-07 16:31) [0]

Подскажите в чем проблема?
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
IconIndex : word;
h : hIcon;
Name : string;
ExtPos : Integer;
Icon : TIcon;
begin
Name := "C:\PROGRA~1\DAP\DAP.EXE";
IconIndex := 129;
h:=ExtractAssociatedIconW(hInstance,PWideChar(Name),IconIndex);
Icon := TIcon.Create;
Icon.Handle := h;
Image1.Picture.Icon := Icon;
Icon.Free;
end;
В результате в конце выполнения этого блока, делфи ругается "Access violation at address ..."


 
troits   (2002-05-07 17:01) [1]

Попробуй вместо
Name: string;

Name: WideString;


 
Digitman   (2002-05-07 17:12) [2]

Как минимум, явное преобразование типа PWideChar(Name), где Name: string, работает не так , как ты предполагаешь. В результате исполнения такой конструкции будет сформирована лишь ссылка на строковый буфер, содержание которого как было типа AnsiString, так и осталось, т.е. компилятор совершенно не заботится в дан.случае о преобразовании Ansi-контекста в Unicode-контекст.

Второе. Я не проверял PAS-прототип, но, согласно MSDN, IconIndex однозначно должен передаваться по ссылке, а не по значению. Уточни PAS-прототип, возможно, следует писать @IconIndex вместо просто IconIndex.


 
troits   (2002-05-07 17:22) [3]

Var - ом она передается.


 
troits   (2002-05-07 17:24) [4]

Да и не скомпилировалось бы иначе.


 
Digitman   (2002-05-07 17:32) [5]

Ну, тогда остается только одно - несоответствие формально ожижаемой Unicode-строки фактически передаваемой Ansi-строке


 
Song   (2002-05-07 21:33) [6]

Image1.Picture.Icon := Icon;
Это я так понимаю вставлено, чтобы вывести иконку на экран. Меньше проблем будет, если будете рисовать через DrawIcon() - вывод на экран всего одной строкой за место всей Вашей процедуры.


 
Cobalt   (2002-05-08 09:46) [7]

Попробуйте назвать Name по другому, чтоб не перепутать с именем формы.


 
Дмитрий Баранов   (2002-05-08 10:46) [8]

Почему ExtractAssociatedIconW? Есть просто ExtractAssociatedIcon, если пишешь не для китайцев - большего и не надо.
Если нужна все-таки W -
см. WideCharToMultiByte и MultiByteToWideChar.


 
Nickolay   (2002-05-08 11:09) [9]

ExtractAssociatedIconW потому что под win2k, если без W то тогда ничего не возвращается в h. IconIndex передается var- ом, это точно. В том то и весь прикол, что если я вместо Name вставляю стринговое значение (прямо в ExtractAssociatedIconW) то все работает как надо.


 
Song   (2002-05-08 11:12) [10]

>>если без W то тогда ничего не возвращается
Ерунда..


 
Nickolay   (2002-05-08 11:18) [11]

Всем большое спасибо за помощь.
Вот так все работает:
var
IconIndex : word;
h : hIcon;
Name : WideString;
ExtPos : Integer;
Icon : TIcon;
begin
Name := "C:\PROGRA~1\DAP\DAP.EXE";
IconIndex := 129;
h:=ExtractAssociatedIconW(hInstance,PWideChar(Name),IconIndex);
Icon := TIcon.Create;
Icon.Handle := h;
Image1.Picture.Icon := Icon;
Icon.Free;
end;

Это для Win2k подходит.


 
Nickolay   (2002-05-08 11:21) [12]

to Song
в принципе возвращается... это h=0.


 
Дмитрий Баранов   (2002-05-08 11:35) [13]

procedure TForm1.Button1Click(Sender: TObject);
var P: array[0..MAX_PATH] of WideChar;
D: PWideChar;
Z: string;
H: HIcon;
Icon: TIcon;
var Dummy: Word;
begin
Z:="W:\0506-spisok.doc";
D:=StringToWideChar(Z, @P, MAX_PATH);
Icon:=TIcon.Create;
Icon.Handle:=ExtractAssociatedIconW(HInstance, D, Dummy);
self.Icon:=Icon;
end;

end.


 
Nickolay   (2002-05-08 12:18) [14]

Еще раз спасибо, так у меня не получалось. Теперь и так есть.



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

Форум: "WinAPI";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
1-23569
Locked
2002-06-27 07:04
2002.07.08
ППодскажите п-ста!!!


3-23445
id_privin
2002-06-14 11:20
2002.07.08
Чтение DBF


1-23658
Anton V
2002-06-26 11:00
2002.07.08
Вопрос про нити!!!!!


3-23464
AndrewK
2002-06-14 15:57
2002.07.08
Как составить запрос. Неужели это невозможно.


3-23526
John Kayfolom
2002-05-16 13:30
2002.07.08
Формирование CREATE TABLE





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