Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
14-58916
TButton
2003-08-31 19:43
2003.09.18
WinXP - вирус???


14-58877
Golovanov
2003-08-29 20:08
2003.09.18
Вниманию пользователей провайдера МТУ-интел


1-58654
SkullNet
2003-09-05 01:45
2003.09.18
OnIdle в Delphi7 ?


9-58507
dynadan
2003-03-16 23:41
2003.09.18
помогите разобраться


1-58664
AlexandrKu
2003-09-05 07:21
2003.09.18
Отчет в MS Word





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский