1 Востаннє редагувалося vanekulykov (21.10.2014 14:40:44)

Тема: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

Наявний блок з вибором інструментів для малювання (РадіоБаттони), і при виборі одного з них, при наступних кліках на Image1 мають вставлятися значки. Але в мене працює неправильно. Я натискаю на RadioButton і вставляється один такий заданий об'єкт.
Ось код, вкажіть будь-ласка на помилку:

unit Unit1_o;

interface

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

type
  TForm1_o = class(TForm)
    Image1: TImage;
    RadioGroup1: TRadioGroup;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    Button1: TButton;
    Button2: TButton;
    ColorDialog1: TColorDialog;
    ColorDialog2: TColorDialog;
    Label1: TLabel;
    GroupBox1: TGroupBox;
    RadioButton6: TRadioButton;
    RadioButton7: TRadioButton;
    RadioButton8: TRadioButton;
    RadioButton9: TRadioButton;
    GroupBox2: TGroupBox;
    RadioButton10: TRadioButton;
    RadioButton11: TRadioButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Edit1: TEdit;
    UpDown1: TUpDown;
    Edit2: TEdit;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure RadioButton4Click(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1_o: TForm1_o;

implementation
uses Unit1;
var x1,y1:integer;




{$R *.dfm}

procedure TForm1_o.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x1:=x;
y1:=y;

end;

procedure TForm1_o.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
image1.Canvas.Polygon([point(x1,y1),point(x1+10, y1+(y-y1)div 2),point(x,y), point(x1,y1)]);
end;



procedure ris(x,y,a:integer;cv:TCanvas);
var b:integer;
begin
b:=a div 2;
with cv do
 begin
  moveto(x-a-b,y-b);lineto(x-b,y-b);
  lineto(x-b,y-a-b);lineto(x-a,y-a-b);
  lineto(x,y-2*a-b);lineto(x+a,y-a-b);
  lineto(x+b,y-a-b);lineto(x+b,y-b);
  lineto(x+a+b,y-b);lineto(x+a+b,y-a);
  lineto(x+2*a+b,y);lineto(x+a+b,y+a);
  lineto(x+a+b,y+b);lineto(x-a-b,y+b);
  lineto(x-a-b,y+a);lineto(x-2*a-b,y);
  lineto(x-a-b,y-a);lineto(x-a-b,y-b);
 end;
end;

procedure TForm1_o.RadioButton4Click(Sender: TObject);
begin
ris(200,200,30,image1.Canvas);
end;


procedure TForm1_o.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ris(x,y,15,Image1.Canvas);
end;


end.

2 Востаннє редагувалося Torbins (20.10.2014 22:06:09)

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

Я вас розчарую, але мушу це зробити, бо бачу, що ви намагаєтеся пересувати вставлений об'єкт: TImage для цієї задачі підходить дуже погано. Спробуйте почитати про TPaintBox. Зображення на ньому стирається саме. Вам треба тільки вписати свій код малювання в його OnPaint. Якщо у вас може бути намальовано багато об'єктів одночасно, то треба зберігати інформацію про видимі об'єкти в масиві.

І перепишіть, будь ласка, своє повідомлення українською.

Подякували: vanekulykov1

3

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

vanekulykov, відредагуйте, будь ласка, пост.

1.1. Мовою спілкування на форумі є українська. Якщо у вас з українською мовою проблема, ви можете використовувати будь-який російськомовний форум такої ж тематики.

4

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

Replace написав:

vanekulykov, відредагуйте, будь ласка, пост.

1.1. Мовою спілкування на форумі є українська. Якщо у вас з українською мовою проблема, ви можете використовувати будь-який російськомовний форум такої ж тематики.

Відредагував.

5

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

Torbins написав:

Я вас розчарую, але мушу це зробити, бо бачу, що ви намагаєтеся пересувати вставлений об'єкт: TImage для цієї задачі підходить дуже погано. Спробуйте почитати про TPaintBox. Зображення на ньому стирається саме. Вам треба тільки вписати свій код малювання в його OnPaint. Якщо у вас може бути намальовано багато об'єктів одночасно, то треба зберігати інформацію про видимі об'єкти в масиві.

І перепишіть, будь ласка, своє повідомлення українською.

Пост переписав. Тепер щодо умови задачі. В мене мають виводитися об'єкти довільно при кліку на кнопку миші. Але в мене вилазить такий один об'єкт вже при виборі інструменту для малювання (RadioButton). Я так розумію, що з вікна TImage не вдасться цього зробити?

6

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

vanekulykov написав:

В мене мають виводитися об'єкти довільно при кліку на кнопку миші. Але в мене вилазить такий один об'єкт вже при виборі інструменту для малювання (RadioButton).

Ви ж самі RadioButton4Click прописали.

vanekulykov написав:

Я так розумію, що з вікна TImage не вдасться цього зробити?

Якщо ці об'єкти потім треба буде пересувати, то ні. А якщо ви хочете намалювати фігуру один раз при натисканні кнопки миші, й потім її не чіпатимете, то TImage підійде.

7

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

Torbins написав:
vanekulykov написав:

В мене мають виводитися об'єкти довільно при кліку на кнопку миші. Але в мене вилазить такий один об'єкт вже при виборі інструменту для малювання (RadioButton).

Ви ж самі RadioButton4Click прописали.

vanekulykov написав:

Я так розумію, що з вікна TImage не вдасться цього зробити?

Якщо ці об'єкти потім треба буде пересувати, то ні. А якщо ви хочете намалювати фігуру один раз при натисканні кнопки миші, й потім її не чіпатимете, то TImage підійде.

Все. Вдалося зробити так, як треба. Не підкажете процедуру для малювання лініі з довільної до довільної точки.

8

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

MoveTo(nPointX, nPointY);
LineTo(nCurrX, nCurrY);

9

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

0xDADA11C7 написав:
MoveTo(nPointX, nPointY);
LineTo(nCurrX, nCurrY);

А як буде виглядати процедура повністю? Річ у тім, що мені малювання довільної лінії треба присвоїти РадіоБаттону.

10

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

В радіоБатоні має буди функція Draw чи onDraw, от туди і засуньте цей код. Я Делфі не маю, тож перевірити власний код мені ніяк.

11

Re: Графіка в Делфі. Присвоїти виведення об'єкту кнопці.

Переробіть Image1MouseUp чи FormMouseDown (де у вас там зараз малювання?), щоб в залежності від обраного радіобатона малювалися різні фігури.