![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отрисовка метки и FocusRect
jack128 © (2004-11-03 04:59:00)День добрый.
Есть такой код:
constructor TSchemeLabel.Create(AOwner: TSchemeElement);
begin
inherited;
FLabel := TLabel.Create(nil);
FLabel.Transparent := True;
end;
procedure TSchemeLabel.Draw(ACanvas: TCanvas);
begin
MoveWindowOrg(ACanvas.Handle, FLabel.Left, FLabel.Top);
try
FLabel.Perform(WM_PAINT, Integer(ACanvas.Handle), 0);
finally
MoveWindowOrg(ACanvas.Handle, -FLabel.Left, -FLabel.Top);
end;
end;
Все хорошо, метка нормально отрисовывается, но есть но..
На той же канве нужно отрисовать FocusRect, а вот этот прямоугольник не рисуется. Рисую так:
with SchemeFrame.PaintBox.Canvas doЕсли не рисовать на канве TSchemeLabel, то отрисовка проходит нормально. Более того, если положит на SchemeFrame обычную метку, то все тоже отлично рисуется..
begin
Pen.Mode := pmCopy;
Pen.Style := psSolid;
Pen.Color := clBlack;
Brush.Style := bsSolid;
Brush.Color := SchemeFrame.Color;
DrawFocusRect(SelRect);
end;
Может у кого есть какие нить соображения??
Rem (2004-11-05 16:36:00) [1]И что такое SelRect? Он попадает в область рисования?
Rem (2004-11-05 16:27:00) [2]А зачем Вам вообще FLabel?
jack128 (2004-11-05 15:44:00) [3]мдя. В общем забил я на попытки понять что происходит... Сохраняю контекст и не мучаюсь..
var
SavedDC: Integer;
begin
SavedDC := SaveDC(ACanvas.Handle);
try
MoveWindowOrg(ACanvas.Handle, FLabel.Left, FLabel.Top);
FLabel.Perform(WM_PAINT, Integer(ACanvas.Handle), 0);
finally
RestoreDC(ACanvas.Handle, SavedDC);
end;
end;
code2k (2004-11-03 16:19:00) [4]up