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

Вниз

Помогите нарисовать линию   Найти похожие ветки 

 
Chris   (2003-09-07 19:13) [0]

На форме есть два объекта (пусть это будут TPanel квадратной формы, размером 10х10). Необходимо нарисовать линию из центров этих объектов.
Как?
Прорисовка на канве формы не пойдет (линия будет под объектами).
Наложить TImage поверх всей формы тоже нельзя - не будут работать события OnClick объектов. (Можно, конечно, переписать OnClick на TImage с проверкой координат мыши, но это крайний способ, т.к. есть и другие обработчики событий и лопатить полторы тысячи строк кода... Лень!!!)


 
Real ©   (2003-09-07 19:30) [1]

Как вариант: рисуй три линии - две на панелях, одна на форме между ними, так чтобы все сливались в одну


 
muravey ©   (2003-09-07 19:31) [2]

Возможен такой вариант:
ты можешь написать новый объект, например:

TNewPanel=class(TPanel)
FCanvas:TCanvas;
.....

end;

в canvas можно рисовать. В твоем случае придется нарисовать три линии.
Посмотри как реализован TBitBtn=class(TButton).


 
Chris   (2003-09-07 20:13) [3]

Попробую...
А как реализовать объект (что-то наподобие реализации формы нестандартной конфигурации), чтобы была видна только линия и к тому же прозрачная часть этого объекта не перекрывала TPanel?


 
Юрий Зотов ©   (2003-09-07 20:32) [4]

> Chris (07.09.03 20:13) [3]

> А как реализовать объект...
Просто наследуйтесь от TGraphicControl и в Paint рисуйте линию.


 
y-soft ©   (2003-09-07 21:20) [5]

Наложить TImage поверх всей формы тоже нельзя - не будут работать события OnClick объектов.

К тому же он все равно нарисуется под панелями на канве родителя-формы(т.к. это неоконный компонент)

IMHO, лучший вариант - не лениться и написать специальный оконный компонент по размером клиентской области формы и рисовать его поверх всех остальных контролов.


type
TTransBox = class(TCustomControl)
private
...
protected
...
public
...
procedure CreateParams(var Params : TCreateParams);
override;
procedure wmNcHitTest(var msg : TWMNCHitTest); messge WM_NCHITTEST;
procedure Paint; override;
...
published
...
end;


В его унаследованном методе CreateParam установить прозрачный стиль окна:


procedure TTransBox.CreateParams(var Params : TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle + ws_ex_Transparent;
end;


А чтобы избежать обработки OnClick переписать обработчик сообщения wm_ncHitTest :


procedure TTransBox.wmNcHitTest(var msg : TWMNCHitTest);
begin
msg.Result := htTransparent;
end;


Рисовать, конечно, в переопределенном методе Paint;
Похожий способ используется в дизайнере форм для изменения размеров/позиции компонентов...

Возможно, придется переписать также обработчик сообщения wm_EraseBkgnd. Необходимо также позаботится об обработке при изменении размеров формы-родителя...

Просьба ногами не пинать - привожу только идею...


 
y-soft ©   (2003-09-07 21:22) [6]

Sorry за опечатки в предыдущем посте :))



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
4-58973
DimaS
2003-07-17 13:44
2003.09.18
У меня есть строка пути к файлу с параметрами, как ее запустить


14-58904
Некрофил - затейник__(тот которого в ридонли закинули)
2003-08-29 11:03
2003.09.18
Меня на долго в readonly закинули?


1-58750
Overlord
2003-09-06 22:46
2003.09.18
Вопрос про звук!


1-58610
Ragazor
2003-09-08 16:42
2003.09.18
Как програмится символ стрелка вниз, вверх....


3-58522
asd
2003-08-27 18:55
2003.09.18
Вставка записей в таблицу InterBase