Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проблема с SystemParametersInfo / 14 сообщений из 14, страница 1 из 1
24.11.2009, 13:43
    #36328317
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
Вот этот код прекрасно работал на D2007:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
   procedure  DoIndirect;
   var  NonClientMetrics: TNonClientMetrics;
      Siz: integer;
   begin 
    Siz := SizeOf(NonClientMetrics);
    FillChar(NonClientMetrics, Siz,  0 );
    NonClientMetrics.cbSize := Siz;
     if  DefaultFont <> dTimeFont  then   begin 
       if  SystemParametersInfo(SPI_GETNONCLIENTMETRICS,  0 , @NonClientMetrics,  0 )  then 
         with  NonClientMetrics  do 
           case  DefaultFont  of 
            dCaptionFont: result := lfCaptionFont;
            dSmCaptionFont: result := lfSmCaptionFont;
            dMenuFont: result := lfMenuFont;
            dStatusFont: result := lfStatusFont;
            dMessageFont: result := lfMessageFont;
           end 
       else 
        RaiseLastOSError;
     end ;
   end ;

Но с переходом на D2010 вызывает такую ошибку:
авторFirst chance exception at $7C812AFB. Exception class EOSError with message
'System Error. Code: 2.
Не удается найти указанный файл'.
Process project123.exe (216)


Как пофиксить?
...
Рейтинг: 0 / 0
24.11.2009, 13:44
    #36328322
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
Да, ошибка при выполнении SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0)...
...
Рейтинг: 0 / 0
24.11.2009, 14:01
    #36328382
quaid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
LiYingКак пофиксить?

Код: plaintext
Siz := NonClientMetrics.SizeOf;
...
Рейтинг: 0 / 0
24.11.2009, 14:02
    #36328386
quaid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
P.S. Похоже, что у тебя Виста?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 class   function  tagNONCLIENTMETRICSW.SizeOf: Integer;
 begin 
   if  Win32MajorVersion >=  6   then 
     // Size of complete structure 
    Result := System.SizeOf(tagNONCLIENTMETRICSW)
   else 
     // Platforms prior to Vista do not recognize the field iPaddedBorderWidth 
    Result := System.SizeOf(tagNONCLIENTMETRICSW) - System.SizeOf(Integer);
 end ;
...
Рейтинг: 0 / 0
24.11.2009, 14:03
    #36328391
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
quaidP.S. Похоже, что у тебя Виста?
win xp sp3
...
Рейтинг: 0 / 0
24.11.2009, 14:03
    #36328392
quaid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
quaidP.S. Похоже, что у тебя Виста?
Нет, я напутал, судя по коду - у тебя не Виста
...
Рейтинг: 0 / 0
24.11.2009, 14:07
    #36328399
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
quaid,
твой совет помог, спасибо!
такие результаты:
Siz := SizeOf(NonClientMetrics); ==> 504
Siz := NonClientMetrics.SizeOf; ==> 500 !!!
...
Рейтинг: 0 / 0
24.11.2009, 14:09
    #36328406
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
Проверь описание функции по Windows.pas, может они изменили описание функции в части @NonClientMetrics, может надо без @

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
24.11.2009, 14:13
    #36328429
LiYing
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
Anatoly PodgoretskyПроверь описание функции по Windows.pas, может они изменили описание функции в части @NonClientMetrics, может надо без @

--
http://www.podgoretsky.com
Не, без @ нельзя:
[Error] E2250 There is no overloaded version of 'SystemParametersInfo' that can be called with these arguments
...
Рейтинг: 0 / 0
24.11.2009, 14:19
    #36328454
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
Я уже проверил по Windows.pas - у тебя правильно

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
10.01.2018, 00:49
    #39581387
octamer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
>> FillChar(NonClientMetrics, Siz, 0);

Размер CHAR:
в D2007 - 1 байт
в D2010 - 2 байта

Т.е. этот оператор затрёт не только область NonClientMetrics, но и столько же байт после неё
...
Рейтинг: 0 / 0
10.01.2018, 07:53
    #39581433
проблема с SystemParametersInfo
octamer, неужели ты думаешь, что создатель темы за последние 8 лет, так и остался с этой проблемой? Пора завязывать с некромантией
...
Рейтинг: 0 / 0
10.01.2018, 08:28
    #39581445
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
octamer>> FillChar(NonClientMetrics, Siz, 0);

Размер CHAR:
в D2007 - 1 байт
в D2010 - 2 байта

Т.е. этот оператор затрёт не только область NonClientMetrics, но и столько же байт после неё

садись, два.
FillChar оперирует байтами.
...
Рейтинг: 0 / 0
10.01.2018, 14:16
    #39581734
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с SystemParametersInfo
LiYingquaid,
твой совет помог, спасибо!

Через восемь лет - не за что! :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проблема с SystemParametersInfo / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]