Полная версия этой страницы:
Простейшие Winapi функции
BattleMage
15:02:2008, 11:05
Доброго времени суток. Мой вопрос состоит из 2х частей. Для выполнения задания мне нужно воспользоваться функциями GetCpInfo() и GetKeyState(), определить параметры копьютера. Про первую вообще не понял ничего, хоть много в инете и пересмотрел... подскажите пожалуйста...
а по второй написал для клавиши Num Lock:
if (GetKeyState(VK_NUMLOCK)==1) Edit1->Text="включена"; else Edit1->Text="выключена";
это правильно?
P.S.: заранее спасибо!
European
15:02:2008, 11:22
Цитата(BattleMage @ 15:02:2008, 13:05 )
Для выполнения задания мне нужно воспользоваться функциями GetCpInfo() и GetKeyState(), определить параметры копьютера.
Какие именно параметры? GetCPInfo проверяет доступность указанной кодовой страницы.
Тут есть по-русски:
GetCPInfoЦитата(BattleMage @ 15:02:2008, 13:05 )
if (GetKeyState(VK_NUMLOCK)==1) Edit1->Text="включена"; else Edit1->Text="выключена";
это правильно?
Лучше так:
Код
if( GetKeyState(VK_NUMLOCK) ) Edit1->Text="включена";
else Edit1->Text="выключена";
BattleMage
15:02:2008, 11:44
1) предположим CP_ACP (кодовая страница ANSI по умолчанию)
2) спасибо...
European
15:02:2008, 11:46
Цитата(BattleMage @ 15:02:2008, 13:44 )
1) предположим CP_ACP (кодовая страница ANSI по умолчанию)
И? Не понимаю в чем вопрос?
BattleMage
15:02:2008, 12:00
как это написать на языке программирования? первый параметр я так понимаю и будет CP_ACP, а второй какой? в результате функция выдаст 0, если не доступна кодовая страница, и 1, если да?
European
15:02:2008, 12:05
Цитата(BattleMage @ 15:02:2008, 14:00 )
как это написать на языке программирования?
Ах, вот оно что

Код
CPINFO Info = {0};
if( GetCPInfo( CP_ACP, &Info ) )
{
// доступна
}
BattleMage
15:02:2008, 12:32
блин... так просто? :) спасибо! никуда не уходи, ща че-нить ещё спрошу... я же только учусь ;)
European
15:02:2008, 12:34
Цитата(BattleMage @ 15:02:2008, 14:32 )
блин... так просто?
Вот я и думаю, что у тебя там могло вызвать вопросы
BattleMage
15:02:2008, 12:47
ещё есть задание определить цвет для символьных констант и изменить его на любой другой. ну определить это точно сделал правильно, а вот изменить - чет не до конца...
глобальные переменные:
COLORREF color1, color2, color3;
int c1=COLOR_DESKTOP, c2=COLOR_WINDOWTEXT, c3=COLOR_INFOTEXT;
по нажатию на эту кнопку должны поменяться цвета:
void __fastcall TForm1::Button5Click(TObject *Sender)
{
color1=0xFF0000; //синий
SetSysColor(1,&c1,&color1);
color2=0x00FF00; //зелёный
SetSysColor(1,&c2,&color2);
color3=0x0000FF; //красный
SetSysColor(1,&c3,&color3);
MessageDlg("Системные цвета изменены",mtInformation, TMsgDlgButtons() << mbOK, 0);
}
однако появляется 4 ошибки, 3 из которых одинаковые:
Build
[C++ Warning] Unit1.cpp(79): W8018 Assigning unsigned long to TColor
[C++ Warning] Unit1.cpp(80): W8018 Assigning unsigned long to TColor
[C++ Warning] Unit1.cpp(81): W8018 Assigning unsigned long to TColor
[C++ Error] Unit1.cpp(161): E2268 Call to undefined function 'SetSysColor'
он почему-то функцию SetSysColor не видит...
Цитата(BattleMage @ 15:02:2008, 14:47 )
однако появляется 4 ошибки
А показали только одну ...
BattleMage
15:02:2008, 13:26
ну предупреждения :) суть от этого не очень меняется...
European
15:02:2008, 13:47
Цитата(BattleMage @ 15:02:2008, 14:47 )
он почему-то функцию SetSysColor не видит...
Соответствующий header (*.h) подключи
BattleMage
15:02:2008, 14:16
всё понял... просто пишется не SetSysColor, а SetSysColors

)
BattleMage
15:02:2008, 15:15
Со всем предыдущим разобрался! Спасибо! Вот ещё вопросик. Нужно воспользоваться константой SPI_SETMENUDROPALIGNMENT функции SystemParametersInfo(). При нажатии на RadioButton1 устанавливается выравнивание "право", на RadioButton2 - "лево". Это правильно? Пишу прогу, не до конца понимая её...
Код
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
f=1;
SystemParametersInfo(SPI_SETMENUDROPALIGNMENT,0,&f,SPIF_UPDATEINIFILE);
}
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
f=0;
SystemParametersInfo(SPI_SETMENUDROPALIGNMENT,0,&f,SPIF_UPDATEINIFILE);
}
European
15:02:2008, 15:23
не компилируется или не работает?
f - какого типа? Вроде все должно быть ОК
BattleMage
15:02:2008, 15:46
вот такого:
bool f;
European
15:02:2008, 15:48
Так проблема где?
BattleMage
15:02:2008, 17:27
проблемы нет... сомнения, что иногда хуже, чем проблема... =))
надеюсь, что последнйи мой вопрос. Нужно воспользоваться константой SPI_SETMENUDROPALIGNMENT функции SystemParametersInfo(), чтобы установить интервал появления скринейвера (заставки) на экран. Правильно сделал?
Код
SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,StrToInt(Edit16-Text)*60,0,SPIF_UPDATEINIFILE);
про умножение на 60 прочитал на каком-то сайте... вообще не понимаю зачем, мы в секундах что ли его выстанавливаем?
Для: BattleMage
MSDN по SystemParametersInfo: This value is the amount of time, in seconds, that the system must be idle before the screen saver activates.
BattleMage
15:02:2008, 21:01
всем спасибо!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.