Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > FillRect & TextOut


Автор: Pakshin A. S. 10.7.2003, 22:15
Пытаюся сделать следующее:
Код

  (*---*)
  FillRect(Rect);
  TextOut(Rect.Left, Tect.Top, (Control as TListBox).Items[Index]);
  (*---*)

На старом Windowse всё работало, но тут вылетает ошибка:
Цитата

  ... не хватает параметров...

Оказывается определение процедур здеся следующее:
Цитата

  function FillRect(hDC: HDC; const lprc: TRect; hbr: HBRUSH): Integer; stdcall;
  function TextOut(DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): BOOL; stdcall;

Хотя Delphi одно и то же, т. е. с одного диска ставил.

А теперь вопросы:
1) Что такое hDC: HDC (DC: HDC) и с чем это едят;
2) Что такое hbr: HBRUSH и с чем это едят;
3) При чём в TextOut Count: Integer.



P. S.
В Help лазил, там всё описывается по другому:
Цитата

  procedure FillRect(const Rect: TRect);
  procedure TextOut(X, Y: Integer; const Text: string);

Автор: &-ray 10.7.2003, 23:19
делай все через canvas:

canvas.textout
canvas.fillrect

Автор: Mikel 11.7.2003, 07:11
Т.е. сначала создай canvas, получи гр. дескриптор этого окна- это и есть то самое hDC, по его Handle(hnd)
Canvas.Handle:=GetDC(hnd)

Автор: <Spawn> 11.7.2003, 08:45
Скорее всего, что эти функции из разных модулей. И вторые из них явно прототипы АПИ. Самое простое конечно использовать Canvas. Но если хочется с АПИ тогда для получения ссылки на контекст утсройства юзай GetDC(Или GetWindowDC, если нужно добраться до рамок окна например). Для использования HBRUSH можно воспользоваться готовой кистью, например, Cnavas.Brush.Handle. А можно через Апи создать новую кисть - CreateBrushIndirect. Короче бери все что я тут сказал и жми F1))))))

Автор: B2_Russia 11.7.2003, 09:16
По-моему, можно без GetDC()
HDC есть практически у всего.

Попробуй так:

function FillRect(Canvas.Handle, rect; Canvas.Brush.Handle);

Ну и для TextOut, чтото подобное.

Автор: &-ray 11.7.2003, 21:15
Зачем такие сложности confused.gif
Pakshin A. S. работает со следующими параметрами:
Цитата

CODE

  (*---*)
  FillRect(Rect);
  TextOut(Rect.Left, Tect.Top, (Control as TListBox).Items[Index]);
  (*---*)

И именно такая структура передается, если работать через канву, т.е.
Код

form1.canvas.FillRect(Rect);
form1.canvas.TextOut(Rect.Left, Tect.Top, Text: string);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)