Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.20;
Скачать: CL | DM;

Вниз

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

 
Goblinus ©   (2002-11-30 02:40) [0]

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

Есть такой кусок кода (чистый 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-11-30 14:57) [1]

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

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

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


 
Morfein ©   (2002-11-30 21:38) [2]

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


 
Goblinus ©   (2002-12-02 01:23) [3]


> MBo ©


Спасибо :)


> Morfein ©

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

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

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


 
MBo ©   (2002-12-02 13:11) [4]

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


 
Goblinus ©   (2002-12-03 01:39) [5]

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

...
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-03 06:27) [6]

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

c:Char;

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




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

Текущий архив: 2003.01.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
4-62934
DDDD
2002-12-05 11:42
2003.01.20
Чтение из буфера


4-62902
Relict
2002-12-03 08:56
2003.01.20
ChooseColor


4-62939
Kiril45
2002-12-06 02:19
2003.01.20
Как узнать что в другом приложении нажата кнопка


1-62614
EvgeniyM
2003-01-09 13:40
2003.01.20
Вопрос по TPopupMenu


6-62716
N3cr0S
2002-11-20 09:28
2003.01.20
Пинг