Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Как оздать свою компоненту с другим внешним видом


Автор: markivanov 9.8.2006, 08:59
Как определить внешний вид для своей компоненты, к примеру изменить внешний вид TPanel.
Я пытался использовать TImage в качестве предка, но с ней не получается перерисовка, сохраняется первоначальное изображение

Автор: Snowy 9.8.2006, 09:13
У TPanel есть Canvas. Как впрочем и у любого TWinControl.
На нём и рисуй. В чём собственно проблема?
Как контрол будет выглядеть - как нарисуешь.
Лучше вообще наследовать от TWinControl, т.к. панель имеет некоторые свои свойства, которые могут помешать нестандартному виду.

Автор: markivanov 9.8.2006, 09:34
у Tpanel нет Canvas

Автор: Snowy 9.8.2006, 09:48
Есть. Просто он protected.
Но наследнику доступен.
Кроме того всегда можно взять GetDC от хэндла контрола и рисовать через API.

Автор: Alexeis 9.8.2006, 11:32
Цитата(Snowy @  9.8.2006,  09:48 Найти цитируемый пост)
Кроме того всегда можно взять GetDC от хэндла контрола и рисовать через API


Код

var
  cnv : TCanvas;
  DC : hDC;
Begin
  DC := GetDC(Panel1.handle);
  cnv := TCanvas.Create;
  cnv.handle := DC;
 //все теперь появился публичный канвас для панели

Автор: Snowy 9.8.2006, 11:35
У панели уже есть канвас.
Зачем его дублировать?

Автор: Alexeis 9.8.2006, 12:43
Цитата(Snowy @  9.8.2006,  11:35 Найти цитируемый пост)
У панели уже есть канвас.
 ну можно, конечно, и наследника сделать, в котором канвсас сделать публичным. Это зависит от желания или не желания сэкономить память.

Автор: Snowy 9.8.2006, 12:49
Ну так человек и хочет писать наследника smile

Автор: Alexeis 9.8.2006, 12:55
Тогда так
Код

  TMyPanel = class(TPanel)
                public
                  property Canvas;
  end;


Добавлено @ 12:56 
А можно вообще не выносить Canvas и так будет доступным в наследнике.

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