Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2007, 14:21   #1
Stark[SG!]
Пользователь
 
Регистрация: 20.02.2007
Сообщений: 12
Вопрос Рисование на Shape

РИСОВАТЬ
На form1 кидаю окно Shape1
Как сделать так чтоб в этом окне нарисовать сетку

Вот эта сетка
Как сделать чтоб эта сетка была в окне Shape1??????


Код:
  unit grid_;
   
  interface
   
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls;
   
  type
    TForm1 = class(TForm)
      procedure FormPaint(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;
   
  var
    Form1: TForm1;
   
  implementation
   
  {$R *.DFM}
   
  procedure TForm1.FormPaint(Sender: TObject);
  var
   x0,y0:integer; // координаты начала координатных осей 
   dx,dy:integer; // шаг координатной сетки (в пикселях) 
   h,w:integer;   // высота и ширина области вывода координатной сетки 
   x,y:integer;
   
   lx,ly:real;    // метки (оцифровка) линий сетки по X  Y 
   dlx,dly:real;  // шаг меток (оцифровки) линий сетки по X и Y 
   cross:integer; // счетчик не оцифрованных линий сетки 
   dcross:integer;// количество не оцифрованных линий между оцифрованными 
  begin
   x0:=30; y0:=220; // оси начинаются в точке (40,250)
   dx:=40; dy:=40;  // шаг координатной сетки 40 пикселей
   dcross:=1;       // помечать линии сетки X: 1 - каждую;
                    //                         2 - через одну;
                    //                         3 - через две;
   dlx:=0.5;        // шаг меток оси X
   dly:=1.0;        // шаг меток оси Y, метками будут: 1, 2, 3 и т.д.
   
   h:=200;
   w:=300;
   
   with form1.Canvas do
   begin
     cross:=dcross;
     MoveTo(x0,y0); LineTo(x0,y0-h);  // ось X
     MoveTo(x0,y0); LineTo(x0+w,y0);  // ось Y
   
     // засечки, сетка и оцифровка по оси X 
     x:=x0+dx;
     lx:=dlx;
     repeat
       MoveTo(x,y0-3);LineTo(x,y0+3);  // засечка
       cross:=cross-1;
       if cross = 0 then   //оцифровка
       begin
         TextOut(x-8,y0+5,FloatToStr(lx));
         cross:=dcross;
       end;
       Pen.Style:=psDot;
       MoveTo(x,y0-3);LineTo(x,y0-h);  // линия сетки
       Pen.Style:=psSolid;
       lx:=lx+dlx;
       x:=x+dx;
     until (x>x0+w);
   
     // засечки, сетка и оцифровка по оси Y 
     y:=y0-dy;
     ly:=dly;
     repeat
       MoveTo(x0-3,y);LineTo(x0+3,y);    // засечка 
       TextOut(x0-20,y,FloatToStr(ly));  // оцифровка 
       Pen.Style:=psDot;
       MoveTo(x0+3,y); LineTo(x0+w,y);    // линия сетки
       Pen.Style:=psSolid;
       y:=y-dy;
       ly:=ly+dly;
     until (y<y0-h);
    end;
  end;
   
  end.

Последний раз редактировалось rpy3uH; 29.07.2008 в 12:22.
Stark[SG!] вне форума Ответить с цитированием
Старый 01.04.2007, 15:08   #2
Kostyan
Пользователь
 
Аватар для Kostyan
 
Регистрация: 25.03.2007
Сообщений: 18
По умолчанию

Все то же самое, только вместо form1.Canvas заменить на form1.Shape1.Canvas
Kostyan вне форума Ответить с цитированием
Старый 01.04.2007, 15:57   #3
Stark[SG!]
Пользователь
 
Регистрация: 20.02.2007
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Kostyan Посмотреть сообщение
Все то же самое, только вместо form1.Canvas заменить на form1.Shape1.Canvas
а процедуру туже оставлять или надо
procedure TForm1.Shape1ContextPopup(Sender: TObject; MousePos: TPoint;var Handled: Boolean);
Stark[SG!] вне форума Ответить с цитированием
Старый 01.04.2007, 18:18   #4
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

Shape1ContextPopup - при вызове контекстного меню.
При условии, что у TShape нет OnPaint... процедуру можно оставить эту-же... и вообще, у шейпа нет канваса, надо объявить
Код:
var c:TControlCanvas;
а потом:
Код:
c:=TControlCanvas.Create;
c.Control:=Shape1;
Роман Радер вне форума Ответить с цитированием
Старый 01.04.2007, 20:43   #5
Kostyan
Пользователь
 
Аватар для Kostyan
 
Регистрация: 25.03.2007
Сообщений: 18
По умолчанию

У Shape есть канвас!!!!!!! он ему достался от

Properties inherited from Controls.TGraphicControlCanvas
Provides the drawing surface used by the graphic control.
Kostyan вне форума Ответить с цитированием
Старый 02.04.2007, 06:14   #6
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
У Shape есть канвас!!!!!!! он ему достался от

Properties inherited from Controls.TGraphicControlCanvas
Provides the drawing surface used by the graphic control
ну по крайне мере
shape1.canvas - уже нету... Где он тогда есть, подскажите?
zetrix вне форума Ответить с цитированием
Старый 02.04.2007, 15:27   #7
Kostyan
Пользователь
 
Аватар для Kostyan
 
Регистрация: 25.03.2007
Сообщений: 18
По умолчанию

С удовольствием подскажу,
у TShape = class(TGraphicControl) присутствует свойство канвас, ото объявлена у его предка а вот и он сам:

Код:
TGraphicControl = class(TControl)
  private
    FCanvas: TCanvas;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  protected
    procedure Paint; virtual;
    property Canvas: TCanvas read FCanvas;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

Последний раз редактировалось rpy3uH; 29.07.2008 в 12:23.
Kostyan вне форума Ответить с цитированием
Старый 09.06.2011, 12:13   #8
Татьяна_16
 
Аватар для Татьяна_16
 
Регистрация: 09.06.2011
Сообщений: 8
По умолчанию

а что делает Shape1ContextPopup процедура?
Всегда найдутся эскимосы, которые напишут для жителей Бельгийского Конго правила поведения в тропическую жару.
Татьяна_16 вне форума Ответить с цитированием
Старый 09.06.2011, 13:22   #9
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
shape1.canvas - уже нету... Где он тогда есть, подскажите?
Как это нету ?
Как он был, так он и есть - от наследства по ООП-закону отказаться нельзя)
А если ты про его "невидимость", так на то он и защищенным объявлен у предка, чтлобы все кому ни попадя туда не лезли без особой на то надобности.
И уж коль скоро такая надобность действительно появляется - вот тогда объявляется наследник, который получает полный доступ к защищенным методам и свойствам предка.
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование... HunterMan Win Api 10 30.04.2008 23:46
Рисование вTImage Rusl92 Компоненты Delphi 27 02.04.2008 14:18
Рисование в Chart SunKnight Общие вопросы Delphi 3 07.02.2008 09:16
по нажатию кнопки shape будет сдвигаться на несколько позиций в сторону (Delphi7) -HunteR- Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 12.11.2007 20:37
timer и shape гера Помощь студентам 4 16.04.2007 20:14