Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Простейшие Winapi функции
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
BattleMage
Доброго времени суток. Мой вопрос состоит из 2х частей. Для выполнения задания мне нужно воспользоваться функциями GetCpInfo() и GetKeyState(), определить параметры копьютера. Про первую вообще не понял ничего, хоть много в инете и пересмотрел... подскажите пожалуйста...
а по второй написал для клавиши Num Lock:
if (GetKeyState(VK_NUMLOCK)==1) Edit1->Text="включена"; else Edit1->Text="выключена";
это правильно?

P.S.: заранее спасибо!
European
Цитата(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
1) предположим CP_ACP (кодовая страница ANSI по умолчанию)
2) спасибо...
European
Цитата(BattleMage @ 15:02:2008, 13:44 )
1) предположим CP_ACP (кодовая страница ANSI по умолчанию)
*

И? Не понимаю в чем вопрос?
BattleMage
как это написать на языке программирования? первый параметр я так понимаю и будет CP_ACP, а второй какой? в результате функция выдаст 0, если не доступна кодовая страница, и 1, если да?
European
Цитата(BattleMage @ 15:02:2008, 14:00 )
как это написать на языке программирования?
*

Ах, вот оно что smile.gif
Код
CPINFO Info = {0};
if( GetCPInfo( CP_ACP, &Info )  )
{
    // доступна
}
BattleMage
блин... так просто? :) спасибо! никуда не уходи, ща че-нить ещё спрошу... я же только учусь ;)
European
Цитата(BattleMage @ 15:02:2008, 14:32 )
блин... так просто? smile.gif
*

Вот я и думаю, что у тебя там могло вызвать вопросы smile.gif
BattleMage
ещё есть задание определить цвет для символьных констант и изменить его на любой другой. ну определить это точно сделал правильно, а вот изменить - чет не до конца...

глобальные переменные:
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 не видит...
sax_ol
Цитата(BattleMage @ 15:02:2008, 14:47 )
однако появляется 4 ошибки

А показали только одну ... wink.gif
BattleMage
ну предупреждения :) суть от этого не очень меняется...
European
Цитата(BattleMage @ 15:02:2008, 14:47 )
он почему-то функцию SetSysColor не видит...
*

Соответствующий header (*.h) подключи
BattleMage
всё понял... просто пишется не SetSysColor, а SetSysColors smile.gif)
BattleMage
Со всем предыдущим разобрался! Спасибо! Вот ещё вопросик. Нужно воспользоваться константой 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
не компилируется или не работает?

f - какого типа? Вроде все должно быть ОК
BattleMage
вот такого:
bool f;
European
Так проблема где?
BattleMage
проблемы нет... сомнения, что иногда хуже, чем проблема... =))
надеюсь, что последнйи мой вопрос. Нужно воспользоваться константой SPI_SETMENUDROPALIGNMENT функции SystemParametersInfo(), чтобы установить интервал появления скринейвера (заставки) на экран. Правильно сделал?

Код
SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,StrToInt(Edit16-Text)*60,0,SPIF_UPDATEINIFILE);


про умножение на 60 прочитал на каком-то сайте... вообще не понимаю зачем, мы в секундах что ли его выстанавливаем?
Pasha
Для: BattleMage
MSDN по SystemParametersInfo: This value is the amount of time, in seconds, that the system must be idle before the screen saver activates.
BattleMage
всем спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.