Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Курсор

Автор: shadoof 19.10.2005 3:31

Есть задача, но по ходу её выполнения в активном окне маргает курсор, как это лечить? <_<

Автор: volvo 19.10.2005 3:36

Лечить "отключением" курсора. Т.к. само мигание курсора реализовано аппаратно, и отключить его нельзя, то будем просто менять размеры курсора, отображаемого на экране:

procedure SetCursorSize(cStart, cEnd: byte); assembler;
asm
mov ah, 1
mov ch, cStart
mov cl, cEnd
int 10h
end;

{ Установить нормальный курсор }
procedure SetNormalCursor;
var start_end: word;
begin
if LastMode > Font8x8 then start_end := $0507
else
if LastMode = Mono then start_end := $0b0c
else start_end := $0607;
SetCursorSize(hi(start_end), lo(start_end));
end;

{ Установить "блочный" курсор (как в режиме OverWrite) }
procedure SetBlockCursor;
var c_end: byte;
begin
if (LastMode > font8x8) or (LastMode <> Mono)
then c_end := 7 else c_end := 13;
SetCursorSize(0, c_end);
end;

{ Отключить курсор }
procedure SetNoCursor;
begin
SetCursorSize(32, 0);
end;


И теперь:
SetNoCursor; { в первой строке программы }
...
SetNormalCursor; { в последней строке }