Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пристыковать TCanvas к TCustomPanel [D6]


SPeller ©   (2002-07-14 09:22:00) 

Добрый день всем! Подскажите, как правильно пристыковать канву к панельке? Если делать не внутри класса, то проходило всё довольно просто:

MyCanvas:=TCanvas.Create;
MyCanvas.Handle:=GetDC(Panel1.Handle);


И рисовало и не ругалось. Внутри же класса TCustomPanel если прописать в конструкторе

FCanvas:=TCanvas.Create;
FCanvas.Handle:=GetDC(Handle);


то в строке FCanvas:=TCanvas.Create; вылазит эксепшин "Control "" has no parent window"... Какой parent window ?? Среди родителей канвы нет ниодного оконного класса, а ошибка происходит в TWinControl.CreateWnd. Идём дальше, игнорируем ошибку, и сразу же второй эксепшин "Canvas does not allow drawing" который означает что хэндл контекста, в котором рисует канва равен нулю. А как же FCanvas.Handle:=GetDC(Handle); ??

Вот полный текст конструктора:

constructor TMyCustomPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
csSetCaption, csOpaque, csDoubleClicks, csReplicatable];
Width := 17;
Height := 17;
FAlignment := taCenter;
BevelOuter := bvNone;
BevelWidth := 1;
FBorderStyle := bsSingle;
FBorderWidth:=1;
Color := clBtnFace;
FFullRepaint := False;
UseDockManager := True;
FLocked:=false;
FPos:=cell(0,0); // Всё что перед такими дробями это самодеятельность
FDefColor:=clWhite; //
Color:=clWhite;
FCellState:=csEmpty; //
FPCell:=nil; //
FCanvas:=TCanvas.Create;
FCanvas.Handle:=GetDC(Handle);
FSNum:=0; //
end;


Объясните пожалуйста в чём я не прав и что не так делаю?


MBo   (2002-07-14 10:42:00) [1]

Во-первых, еслия я правильно понял задачу, Canvas у TCustomPanel
уже есть, только protected( в TCustomControl объявлено)
Во-вторых, в подобных случаях нельзя обращаться к окну в Create- в этот момент окно еще не создано, и хэндла не имеет. Следует перекрыть CreateWnd, и операции, которым нужен дескриптор оконного элемента, делать там.


Наверх

Титульная страница Поиск, карта сайта Написать письмо