Главная страница
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.021 c
4-62915
boa
2002-12-04 11:17
2003.01.20
Как отследить изменение раскладки клавиатуры?


1-62487
ЮРИЙ_К
2003-01-10 11:54
2003.01.20
Хинт в трэе под ХР ???


14-62765
aga
2002-12-29 14:06
2003.01.20
Фанаты Муимий Тролля!!


6-62704
Ser_Kham1
2002-11-22 10:34
2003.01.20
Проблемы с Pop3


1-62583
Johnny
2003-01-08 22:55
2003.01.20
текст Item из List box=edit.text : как сделать?