Читать «Виртуальная библиотека Delphi» онлайн - страница 145

Unknown

Пример:

with TDirectoryListBox(FileListBox1) do begin

 Columns := 2;

 SendMessage(Handle, LB_SETCOLUMNWIDTH, Canvas.TextWidth('WWWWWWWW.WWW'),0);

end;

Вопрос:

Как настроить табуляцию в компоненте TMemo?

Ответ:

Пошлите в Memo сообщение EM_SETTABSTOPS. Например установим первую позицию табуляции на 20-й пиксел.

Пример:

procedure TForm1.FormCreate(Sender: TObject);

var

 DialogUnitsX : LongInt;

 PixelsX : LongInt;

 i : integer;

 TabArray : array[0..4] of integer;

begin

 Memo1.WantTabs := true;

 DialogUnitsX := LoWord(GetDialogBaseUnits);

 PixelsX := 20;

 for i := 1 to 5 do begin

  TabArray[i - 1] :=((PixelsX * i ) * 4) div DialogUnitsX;

 end;

 SendMessage(Memo1.Handle, EM_SETTABSTOPS,5,LongInt(@TabArray));

 Memo1.Refresh;

end;

Вопрос:

Как перехватить нажатия функциональных клавиш и стрелок?

Ответ:

Проверяйте значение переменной key на равенство VK_RIGHT, VK_LEFT, VK_F1 и т.д. на событии KeyDown формы.

Пример:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if Key = VK_RIGHT then Form1.Caption := 'Right';

 if Key = VK_F1 then Form1.Caption := 'F1';

end;

Вопрос:

При обработке события DrawCell компонента DrawGrid я пишу Font.Color := clRed; и получаю бесконечный цикл мерцаний. Почему?

Ответ:

Правильно укажите границы используемого канваса.

Пример:

If (Row = 0) then begin

 DrawGrid1.Canvas.Font.Color := clRed;

 DrawGrid1.Canvas.TextOut(Rect.Left,Rect.Top, IntToStr(Col));

end;

Вопрос:

При использовании BitBtn Caption(текст) и картинка(bitmap) из файла не видны одновременно. Почему?

Ответ:

Это может происходить если картинка слишком велика. Класс TBitBtn сначала рисует картинку, а затем выводит текст над, под, слева или справа от картинки (в завивимости от свойства Layout). Если размер картинки такой же как у всей кнопки для вывода текста просто не остается места. Если Вам нужно получить кнопку такого же размера как Ваша картинка и видеть при этом надпись на кнопке Вам придется выводить текст надписи непосредственно на канву картинки.

Пример:

var

 bm : TBitmap;

 OldBkMode : integer;

begin

 bm := TBitmap.Create;

 bm.Width := BitBtn1.Glyph.Width;

 bm.Height := BitBtn1.Glyph.Height;

 bm.Canvas.Draw(0, 0, BitBtn1.Glyph);

 OldBkMode := SetBkMode(bm.Canvas.Handle, Transparent);

 bm.Canvas.TextOut(0, 0, 'The Caption');

 SetBkMode(bm.Canvas.Handle, OldBkMode);

 BitBtn1.Glyph.Assign(bm);

end;

Вопрос:

Можно ли изменить вид текстового курсора (каретки) edit'а или другого элемента управления Windows?

Ответ:

Можно! В примере показано как создать два цветных "bitmap'а": "улыбчивый" и "хмурый" и присвоить их курсору edit'а. Для этого нужно перехватить оконную процедуру edit'а. Чтобы сделать это заменим адрес оконной процедуры Edit'а нашим собственным, а старую оконную процедуру будем вызывать по необходимости. Пример показывает "улыбчивый" курсор при наборе текста и "хмурый" при забое клавишей backspace.