Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Проблемма с TabControl   Найти похожие ветки 

 
Юра   (2007-09-10 19:58) [0]

Есть TabControl и 2 закладки на одной из закладок нарисован прямоугольник :  
with TabControl1 do begin
Canvas.Brush.Color := clWhite;
Canvas.Pen.Color := clBlack;
Canvas.Rectangle(10,50,50,100);
end;
Если я удаляю одну из закладок, то изображение это стирается.
Как сделать так, чтобы оно восстанавливалось?
Пробовал вышеуказанный код, добавлять в обработчик события OnPaint формы и при удаление вызывать Invalidate, не помогает...


 
{RASkov} ©   (2007-09-11 00:04) [1]

> [0] Юра   (10.09.07 19:58)
> Есть TabControl и 2 закладки на одной из закладок нарисован
> прямоугольник :  

В данном примере, (да и вообще у TTabControl"а как таковых закладок нет) нарисовано не на одной из закладок, а на общей(для всех закладок) клиентской части компонента....
Это раз.
Два: если хочешь что бы изображение перерисовывалось(не стиралось), то тебе нужно обработать WM_PAINT у твоего TabControl"а где и рисовать необходимое на клиентской части компонента... возможно учитывая параметры, такие как TabIndex.

> Пробовал вышеуказанный код, добавлять в обработчик события
> OnPaint

Зачем ты в сообщении чужому окну пытаешься рисовать на своем(другом) окне??
Твоему TabControl"у так же шлется WM_PAINT и ему можно сделать свой OnPaint.


 
Юра   (2007-09-11 08:59) [2]

А как обработать для него сообщение OnPaint, в инспекторе объектов TabControl есть только OnDrawTab?


 
{RASkov} ©   (2007-09-11 13:59) [3]

> [2] Юра   (11.09.07 08:59)
> А как обработать для него сообщение OnPaint

Нет такого сообщения, это(OnPaint) свойство.
Тебе нужно либо создать новый TMyTabControl и добавить туда это свойство
(посмотри как это сделано у TGraphicControl, например)
или переопредели TabControl.WindowProc и там лови WM_PAINT


 
{RASkov} ©   (2007-09-11 14:08) [4]

> это(OnPaint) свойство

> (посмотри как это сделано у TGraphicControl, например)

Т.е. у TGraphicControl нет свойства OnPaint, но есть метод где ловится сообщение WM_PAINT
а свойство определяется примерно так:

 TMyControl = class()
 private
   FOnPaint: TNotifyEvent;
   procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
......
 public
....
   property OnPaint TNotifyEvent read FOnPaint write FOnPaint;
 end;
.................
procedure TMyControl.WMPaint(var Message: TWMPaint);
begin
 inherited;
 if Assigned(FOnPaint) then FOnPaint(self);
end;


 
Юра   (2007-09-12 10:37) [5]

Объясни пожалуйста тело функции WMPaint.


 
Kolan ©   (2007-09-12 11:02) [6]

> Объясни пожалуйста тело функции WMPaint.

Если событие FOnPaint задано, то вызвать его.

А вообще RTFM про события(Events) в Delphi.
Хорошо написано в книге:
Delphi 5. Руководство разработчика, том 1
http://www.podgoretsky.com/ddp.html


 
{RASkov} ©   (2007-09-12 11:06) [7]

> [5] Юра   (12.09.07 10:37)

Если определен

> if Assigned(FOnPaint)

обработчик OnPaint, то его выполнить

> FOnPaint(self);

Предварительно вызвав у предка этот же метод...

> inherited;

Посмотри в VCL как организованы и реализованы обработчики событий.... ничего сложного там нет.
Вместо if Assigned(FOnPaint) then FOnPaint(self); можно написать необходимый код и делать все "внутри" компонента....


 
{RASkov} ©   (2007-09-12 11:08) [8]

> Предварительно вызвав у предка этот же метод...
>
> > inherited;

Ух.... Этот же - это не OnPaint, а WMPaint.


 
DimaBr ©   (2007-09-14 14:38) [9]

Всё это можно сделать и в OnDrawTab, предварительно проверив является ли рисуемая вкладка первой.


 
{RASkov} ©   (2007-09-14 17:23) [10]

А если чесно, то TabControl не для этого.
Ну уж если сильно приспичило, то вот еще вариант:
"Кинуть" на TabControl TPaintBox, написать ему необходимый OnPaint
а у TabControl"а в его событии смены закладок написать нечто такое:
PaintBox.Visible:=TabIndex=<нужная закладка>;



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
2-1194597990
031178
2007-11-09 11:46
2007.12.09
Трафик


15-1194867744
@!!ex
2007-11-12 14:42
2007.12.09
Проект вылетает


2-1194876354
hahol_64_rus
2007-11-12 17:05
2007.12.09
помогите чайнику


3-1185587116
wsv
2007-07-28 05:45
2007.12.09
Написать запрос


15-1194616987
Parus
2007-11-09 17:03
2007.12.09
Запрет хостов!