Текущий архив: 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.45 MB
Время: 0.013 c