Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.11.2016, 14:17
Foma Foma вне форума
Прохожий
 
Регистрация: 14.10.2016
Сообщения: 6
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию Пунктирная рамка

Здравствуйте! Когда Image или PaintBox кладется на форму, то вокруг их чертится пунктирная рамка, соединяющая голубые кружочки (в режиме проектирования). Я сделал компонент типа PaintBox и хочу, чтобы вокруг него появлялась такая пунктирная рамка. Кто подскажет, как получить такую рамку?
Ответить с цитированием
  #2  
Старый 02.11.2016, 15:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Стиль у Pen := psDash;
Далее Rectangle()
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 03.11.2016, 15:28
Foma Foma вне форума
Прохожий
 
Регистрация: 14.10.2016
Сообщения: 6
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Здравствуйте! Во-первых, спасибо за ответ. А во-вторых, может знаете, как рисовать на TPanel? Дело в том, что я работаю на Дельфи 2009, и на нем ни один пример не работает. Я пробовал создать дочерний класс и поместить property Canvas в раздел public - не вышло. Canvas виден среди свойств новой панели, но не работает, как будто для красоты там находится. Пробовал TControlCanvas, так его даже в Хелпе нет. Не исключено, что я что-то не так делаю; может, более опытные товарищи подскажут?
Ответить с цитированием
  #4  
Старый 03.11.2016, 15:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Так надо процедуру отрисовки переопределить.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 11.05.2017, 16:49
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

если еще актуально (да и, мало ли, может кому пригодится)...

Как рисовать на компоненте, не имеющем свойства 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  
Старый 11.05.2017, 18:58
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Decoding
если еще актуально (да и, мало ли, может кому пригодится)...

Ой как неправильно.

Код:
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.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 15.05.2017, 09:50
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Возможно с TPanel пример не совсем корректный, но в общем случае он правильный, например для TButton.

Канвой обладают все графические компоненты (наследники от TGraphicControl), но не все оконные компоненты. Те компоненты, которые наследуются от TCustomControl, имеют канву, к таким компонентам относится и панель.

Код:
TCustomControl = class(TWinControl)
  private
    FCanvas: TCanvas;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;
 
{ TCustomControl }
constructor TCustomControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCanvas := TControlCanvas.Create;
  TControlCanvas(FCanvas).Control := Self;
end;
destructor TCustomControl.Destroy;
begin
  FCanvas.Free;
  inherited Destroy;
end;

А вот к примеру кнопки (TButton) канвы не имеют (они наследуются от TButtonControl), и тогда описанный выше способ будет очень кстати.

Зачем кнопке канва, это уже другой вопрос (просто поверьте, бывают случаи когда она необходима).
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter