![]() |
|
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! Когда Image или PaintBox кладется на форму, то вокруг их чертится пунктирная рамка, соединяющая голубые кружочки (в режиме проектирования). Я сделал компонент типа PaintBox и хочу, чтобы вокруг него появлялась такая пунктирная рамка. Кто подскажет, как получить такую рамку?
|
|
#2
|
||||
|
||||
|
Стиль у Pen := psDash;
Далее Rectangle() |
|
#3
|
|||
|
|||
|
Здравствуйте! Во-первых, спасибо за ответ. А во-вторых, может знаете, как рисовать на TPanel? Дело в том, что я работаю на Дельфи 2009, и на нем ни один пример не работает. Я пробовал создать дочерний класс и поместить property Canvas в раздел public - не вышло. Canvas виден среди свойств новой панели, но не работает, как будто для красоты там находится. Пробовал TControlCanvas, так его даже в Хелпе нет. Не исключено, что я что-то не так делаю; может, более опытные товарищи подскажут?
|
|
#4
|
||||
|
||||
|
Так надо процедуру отрисовки переопределить.
|
|
#5
|
||||
|
||||
|
если еще актуально (да и, мало ли, может кому пригодится)...
Как рисовать на компоненте, не имеющем свойства Canvas Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TPanel = class({Vcl.}ExtCtrls.TPanel)
public
Canvas: TCanvas;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Panel1.Canvas.MoveTo(10, 10);
Panel1.Canvas.LineTo(50, 50);
end;
{ TPanel }
constructor TPanel.Create(AOwner: TComponent);
begin
inherited;
Canvas := TCanvas.Create;
Canvas.Handle := GetDC(Self.Handle);
end;
destructor TPanel.Destroy;
begin
Canvas.Free;
inherited;
end;
end.Последний раз редактировалось Decoding, 11.05.2017 в 17:25. |
|
#6
|
||||
|
||||
|
Цитата:
Ой как неправильно. Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TPanel = class(ExtCtrls.TPanel)
protected
procedure Paint; override;
public
property Canvas;
end;
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TPanel }
procedure TPanel.Paint;
begin
inherited Paint;
Canvas.Pen.Style:=psDash;
Canvas.Rectangle(10, 10, ClientWidth-10, ClientHeight-10);
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
Panel1.Canvas.MoveTo(10, 10);
Panel1.Canvas.LineTo(ClientWidth-10, ClientHeight-10);
end;
end. |