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

Вниз

Как рисовать на TPanel   Найти похожие ветки 

 
HRustBB   (2010-06-05 19:15) [0]

у компонента TPanel пытаюсь достучаться до свойства Canvas, создал компонент


unit myPanel;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;

type
 TmyPanel = class(TPanel)
 private
   { Private declarations }
 protected
   { Protected declarations }
 public
   property Canvas;
 published
   { Published declarations }
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Standard", [TmyPanel]);
end;

end.


кинул его на форму и пытаюсь по нажатии кнопки нарисовать просто линию на этой панели


myPanel11.Canvas.Pen.Color:=0;
myPanel11.Canvas.MoveTo(0,0);
myPanel11.Canvas.LineTo(100,100);


а линии то нет !?
Подскажите пожалуйсто что я неправильно делаю


 
Демо ©   (2010-06-05 19:54) [1]

 TMPanel=class(TPanel)
 end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 TMPanel(Panel1).Canvas.PenPos := Point(0,0);
 TMPanel(Panel1).Canvas.LineTo(100,100);


 
HRustBB   (2010-06-05 20:11) [2]


> Демо ©   (05.06.10 19:54) [1]


а можно поподробней для ламера :)


 
Демо ©   (2010-06-05 20:58) [3]

Поле Canvas в классе TPanel находится в секции protecte. Это означает, что оно доступно в наследниках TPanel.

Описываем класс-наследник TMPanel и обращаемся к Panel1 как к наследнику. В наследнике доступно поле Canvas.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type

 TMPanel=class(TPanel)
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   Panel1: TPanel;


procedure TForm1.Button1Click(Sender: TObject);
begin
 TMPanel(Panel1).Canvas.PenPos := Point(0,0);
 TMPanel(Panel1).Canvas.LineTo(100,100);


 
Демо ©   (2010-06-05 20:59) [4]

PS.
Это стандартный метод для доступа к protected-полям.


 
Loginov Dmitry ©   (2010-06-05 22:56) [5]


> кинул его на форму и пытаюсь по нажатии кнопки нарисовать
> просто линию на этой панели
>
>
> myPanel11.Canvas.Pen.Color:=0;
> myPanel11.Canvas.MoveTo(0,0);
> myPanel11.Canvas.LineTo(100,100);
>


Для рисования линий по кнопке используйте TImage.

В общем случае рисование осуществляется в OnPaint / WMPaint.
OnPaint есть у TPaintBox


 
Правильный$Вася   (2010-06-05 22:56) [6]


> кинул его на форму и пытаюсь по нажатии кнопки нарисовать
> просто линию на этой панели

просто перерисовки вызываются виндой часто, и твоя линия была затерта
рисовать нужно в обработчике события Paint


 
спрашиваю   (2010-06-06 00:15) [7]


> Для рисования линий по кнопке используйте TImage.


зафигом ?


 
Демо ©   (2010-06-06 00:43) [8]


> пытаюсь по нажатии кнопки нарисовать просто линию на этой
> панели



> Loginov Dmitry ©   (05.06.10 22:56) [5]
>Для рисования линий по кнопке используйте TImage.



> Правильный$Вася   (05.06.10 22:56) [6]
> рисовать нужно в обработчике события Paint


Вообще-то вопрос про TPanel.


 
спрашиваю   (2010-06-06 01:09) [9]

Демо ©   (06.06.10 00:43) [8]


> Вообще-то вопрос про TPanel.


Даже у TPanel надо рисовать в перекрытой процедуре Paint


 
Демо ©   (2010-06-06 01:17) [10]


> спрашиваю   (06.06.10 01:09) [9]
> Демо ©   (06.06.10 00:43) [8] > Вообще-то вопрос про TPanel.
> Даже у TPanel надо рисовать в перекрытой процедуре Paint


Кому надо?


 
Германн ©   (2010-06-06 01:44) [11]


> Кому надо?
>

Наверно автору, Саш.
Его способ с созданием наследника может и не нужен, но ведь вопрос то "а линии то нет !?"


 
HRustBB   (2010-06-06 02:00) [12]


> Демо ©   (05.06.10 20:58) [3]


Спасибо, то что нужно.

При репаинте линия пропадает действительно, но это вопрос для меня решаемый :)


 
Харакири   (2010-06-06 10:12) [13]


> При репаинте линия пропадает действительно, но это вопрос
> для меня решаемый :)


По таймеру ее, по таймеру!

:о)


 
Leonid Troyanovsky ©   (2010-06-06 10:48) [14]


> HRustBB   (05.06.10 19:15)  

> Подскажите пожалуйсто что я неправильно делаю


type
TmyPanel = class(TPanel)
private
  { Private declarations }
protected
  { Protected declarations }
public
  procedure Paint; override;
published
  { Published declarations }
end;

procedure TMyPanel.Paint;
begin
 inherited;
 Canvas.Pen.Color:=0;
 Canvas.MoveTo(0,0);
 Canvas.LineTo(100,100);
end;

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-06-06 10:50) [15]


> Демо ©   (05.06.10 20:59) [4]

Стандартом является создание наследника.
А это - хак.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-06-06 11:36) [16]


> HRustBB   (05.06.10 19:15)  

> просто линию на этой панели


type
TmyPanel = class(TPanel)
private
  { Private declarations }
  FDrawLine: Boolean;
protected
  { Protected declarations }
  procedure Paint; override;
  procedure SetDrawLine(const Value: Boolean); virtual;
public
  property DrawLine: Boolean read FDrawLine write SetDrawLine;
published
  { Published declarations }
end;

procedure TMyPanel.Paint;
begin
 inherited;
 if FDrawLine then
   begin
     Canvas.Pen.Color:=0;
     Canvas.MoveTo(0,0);
     Canvas.LineTo(100,100);
   end;
end;

procedure TMyPanel.SetDrawLine;
begin
 if (Value <> FDrawLine) then
   begin
     FDrawLine := Value;
     Invalidate;
   end;
end;

--
Regards, LVT.


 
Демо ©   (2010-06-06 14:34) [17]


> > Демо ©   (05.06.10 20:59) [4] Стандартом является создание
> наследника.А это - хак.


Пусть называется хак. Вот он-то де-факто и есть стандартный метод.


 
Омлет ©   (2010-06-07 11:38) [18]

http://fenik.nm.ru/DrawPanel.zip



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

Форум: "Начинающим";
Текущий архив: 2010.08.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
2-1275836698
Askalot
2010-06-06 19:04
2010.08.29
Images


15-1276069755
SD Software
2010-06-09 11:49
2010.08.29
Цифровая подпись файла


15-1266842702
KilkennyCat
2010-02-22 15:45
2010.08.29
Административное предложение (McSimmу и всем)


10-1167679059
TStas
2007-01-01 22:17
2010.08.29
Как получить код странички, загруженной в WebBrowser?


2-1275905953
stas
2010-06-07 14:19
2010.08.29
Гарантированно убить Thread





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский