Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SetDCPenColor [D7, WinXP]


Goblinus ©   (2002-11-30 02:40:00) 

Доброго всем времени суток!

Есть такой кусок кода (чистый WinAPI):

...
var
VisCaret: Boolean = False;
XCaret: Integer = 1;
Ycaret: Integer = 1;
...

function WindowProc...
var
DC:HDC
Cl: Longint;
...
case M of
...
WM_Timer: if wParam = 1 then begin
VisCaret := not VisCaret;
if VisCaret = True then CL := 0
else cl := .../цвет clBtnFace - как его получить?
SetDCPenColor(CL); //subj
MoveToEx(DC, XCaret, YCaret, nil);
LineTo(DC, XCaret, YCaret + 16);
end;
...


Короче, создаётся курсор на экране.
Только вот subj не работает почему-то, курсор не мигает, остаётся черным. что делать? C таймером всё в порядке
Помогите, плиз.


MBo   (2002-12-03 06:27:00) [1]

Ты не понял - wParam НЕ ЯВЛЯЕТСЯ адресом строки, и приведение его к PChar бессмысленно - получаешь указатель на один из младших адресов памяти. Сделай, например, так:

c:Char;

c:=Chr(wparam);
TextOut(dc,x,y,@c,1);


Goblinus   (2002-12-03 01:39:00) [2]

Не получается чего-то:

...
var
DC: HDC;
cl, clWhite: LongInt;
S: PChar;
TextExtent: TSize;
TextWidth: Integer;
...

WM_Char: begin
KillTimer(Wnd, 1);
PaintCaret(DC, clWhite);
S := PChar(wParam);
GetTextExtentPoint32(DC, S, 1, TextExtent);
TextWidth := TextExtent.cx;
TextOut(DC, XCaret, YCaret, S, 1);
Inc(XCaret, TextWidth);
PaintCaret(DC, 0);
end;

...


MBo   (2002-12-02 13:11:00) [3]

PChar(wParam)
так нельзя
wParam сообщения wm_char содержит не указатель на строку, а непосредственно символ. Создай временную строку pchar или string, запиши в нее этот символ, потом уже передавай в textout


Goblinus   (2002-12-02 01:23:00) [4]


> MBo ©


Спасибо :)


> Morfein ©

Не понял, что ты имел ввиду. Но уже неважно, все работает...

Только теперь другая трабла...

WM_CHAR: begin
TextOut(DC, XCaret, YCaret, PChar(wParam), 1); //Выдается
//Run-time error 216. суть в том, чтобы вывести символ на
//форму
...
end;


Morfein   (2002-11-30 21:38:00) [5]

Всё просто... он и не будет мигать!
Ты ж только одну фазу курсора рисуешь...
Вот и получается, что по таймеру у тебя каждые сколько-то сек. рисуется одна и та же чёрточка...


MBo   (2002-11-30 14:57:00) [6]

1) Хоть это и кажется невероятным, cl:=clBtnFace;

2) не вижу SelectObject !!!!

3) программа с использованием DC_PEN будет работать не на всех операционках.


Наверх

Титульная страница Поиск, карта сайта Написать письмо