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

Вниз

создание объекта заданного цвета   Найти похожие ветки 

 
smartleds   (2007-09-26 00:11) [0]

Посоветуйте как лучше сделать. Задача такая по заданному значению цвета RGB. При нажатии кнопки мне нужно создать объект (типа круг , квадрат, форма любая ) заданного цвета.
При следующем нажатии создать еще один объект рядом с этим, на той же форме и т.д. И еще этот чтобы этот объект можно было выделить мышкой и изменить его цвет, изменив параметры RGB.
Вопрос, при помощи каких компонент лучше делать такие объекты?


 
Германн ©   (2007-09-26 00:33) [1]


> типа круг , квадрат, форма любая


> Вопрос, при помощи каких компонент лучше делать такие объекты?
>

Переведи на английский слово "форма" или "фигура", добавь к ответу первую букву T (латинскую разумеется) и получишь название компонента.


 
Anatoly Podgoretsky ©   (2007-09-26 00:35) [2]

> smartleds  (26.09.2007 00:11:00)  [0]

С помощью канвы


 
{RASkov} ©   (2007-09-26 00:36) [3]

> [0] smartleds   (26.09.07 00:11)

Ну это не вопрос..... ответ не в "двух словах"....
Можно кучу вариантов придумать... Как простой вариант попробуй TShape.... Только для

> форма любая

не очень-то он подойдет :(
Тогда TPaintBox(ы).... можно на одном прорисовывать все фигуры, а можно несколько как отделные фигуры использовать этот компонент...
Вообщем ты зацепись за какую нибудь идею и задай конкретный вопрос, а потом и видно будет.


 
smartleds   (2007-09-26 00:43) [4]

Спасибо за ответы.
Вот нарисовал круг при помощи канвы
with form1.canvas do begin
  brush.color:=(RGB(R,G,B));
  Ellipse(1,1,20,20);
  end;
А как сделать чтобы при помощи мышки можно было этот круг выделить , чтобы изменить RGB?


 
Германн ©   (2007-09-26 00:46) [5]


> {RASkov} ©   (26.09.07 00:36) [3]


> Вообщем ты зацепись за какую нибудь идею и задай конкретный
> вопрос

Так он его и задал. Точнее ему задали. :-)

> Только для
>
> > форма любая
>
> не очень-то он подойдет :(

Имхо, "форма любая" означает "форма не имеет значения. какаю сможешь, такую и нарисуй". Так что TShape в самый раз.


 
Dmitro ©   (2007-09-26 00:46) [6]


> задай конкретный вопрос, а потом и видно будет

Согласен


 
Германн ©   (2007-09-26 00:47) [7]


> Вот нарисовал круг при помощи канвы

Ну и зря.

> А как сделать чтобы при помощи мышки можно было этот круг
> выделить , чтобы изменить RGB?

А ты можешь выделить мышкой рисунок на бумаге?


 
{RASkov} ©   (2007-09-26 01:04) [8]

> [4] smartleds   (26.09.07 00:43)

Не... давай другой вариант :)

Смотри, что бы использовать вариант тупа с канвой, тебе нужно где-то помнить параметры рисунка(фигур(ы)), и при перемещении "мышки" над некой канвой, учитывать нажата ли кнопка на мышке и если все ок, то нужно изменить некие параметры фигуры с учетом текущего положения мышки, предварительно стерев фигуру со старого места и нарисовать ее уже на новом.... это и будет перемещение. При этом нужно не затронуть другие :)

> А как сделать чтобы при помощи мышки можно было этот круг
> выделить , чтобы изменить RGB?

улыбнуло :)
Тут вообще "труба" PtInRect... даже PtInRegion потом как-то внутри программы выбрать некую фигуру, грубо ее параметры... и тот самый RGB :)
Вообщем тут не объяснишь на пальцах....

Глянь на T<Фигура>....


 
Anatoly Podgoretsky ©   (2007-09-26 01:15) [9]

> {RASkov}  (26.09.2007 01:04:08)  [8]

Ничего стирать не надо, надо просто рисовать. Подобные программы именно так пишутся, а то еще будет спрашивать, провел другим окошком поверх, а оно тютю. И конечно список объектов с учетом Z order


 
{RASkov} ©   (2007-09-26 01:33) [10]

> [9] Anatoly Podgoretsky ©   (26.09.07 01:15)

Согласен.... вот в примере ниже нет вот этого вот:
> учетом Z order

Ну да ладно.... пусть автор вопроса изучает принцип рисования(прорисовки)


> smartleds

Просто замени в новом проекте модуль формы на вот этот и пропиши обработчики
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type
 TFig = class
   X,Y,R: Integer;
   CLR: TColor;
 public
   procedure Paint(Cnv: TCanvas); virtual;
   function InMouse(const AX, AY: Integer): Boolean;
   constructor Create(const AX, AY, AR: Integer);
 end;

 TRectFig = class(TFig)
 public
   procedure Paint(Cnv: TCanvas); override;
 end;

 TEllFig = class(TFig)
 public
   procedure Paint(Cnv: TCanvas); override;
 end;

 TForm1 = class(TForm)
   procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
   procedure FormPaint(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   CR: TRectFig;
   CE: TEllFig;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
{ TFig }
constructor TFig.Create(const AX, AY, AR: Integer);
begin
 X:=AX; Y:=AY; R:=AR;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CR:=TRectFig.Create(40, 40, 30);
 CE:=TEllFig.Create(150, 100, 30);
 DoubleBuffered:=True;
end;

function TFig.InMouse(const AX, AY: Integer): Boolean;
begin
 Result:=PtInRect(Rect(X-R, Y-R, X+R, Y+R), Point(AX, AY));
end;

procedure TFig.Paint(Cnv: TCanvas);
begin
 Cnv.Brush.Color:=CLR;
end;

{ TRectFig }

procedure TRectFig.Paint(Cnv: TCanvas);
begin
 inherited;
 Cnv.Rectangle(X-R, Y-R, X+R, Y+R);
end;
{ TEllFig }

procedure TEllFig.Paint(Cnv: TCanvas);
begin
 inherited;
 Cnv.Ellipse(X-R, Y-R, X+R, Y+R);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if not (ssLeft in Shift) then Exit;
 if CR.InMouse(X, Y) then begin
  CR.X:=X;
  CR.Y:=Y;
  if ssRight in Shift then CR.CLR:=RGB(Random(255), Random(255), Random(255));
 end else if CE.InMouse(X, Y) then begin
  CE.X:=X;
  CE.Y:=Y;
  if ssRight in Shift then CE.CLR:=RGB(Random(255), Random(255), Random(255));
 end;
 Invalidate;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 CR.Paint(Canvas);
 CE.Paint(Canvas);
end;

end.


Не идеально, но на скорую руку для изучения может и пойдет.


 
smartleds   (2007-09-26 01:47) [11]

Я так понял мне компонент Tshape курить?


 
{RASkov} ©   (2007-09-26 01:50) [12]

> [11] smartleds   (26.09.07 01:47)

Кури все, что считаешь нужным....
Ты код [10] пробывал? Если смотрел, то суть понял?


 
Германн ©   (2007-09-26 01:54) [13]


> smartleds   (26.09.07 01:47) [11]
>
> Я так понял мне компонент Tshape курить?
>

Кури. "Начинающим" это полезно.


 
Германн ©   (2007-09-26 01:59) [14]

Удалено модератором
Примечание: Оффтоп


 
{RASkov} ©   (2007-09-26 02:04) [15]

Удалено модератором
Примечание: Оффтоп


 
Джо ©   (2007-09-26 02:06) [16]

Не оффтопьте, граждане, пожалуйста! :)


 
Германн ©   (2007-09-26 02:08) [17]


> Джо ©   (26.09.07 02:06) [16]

Извини.


 
Германн ©   (2007-09-26 02:13) [18]


> {RASkov} ©   (26.09.07 02:04) [15]

Я хотел сказать, что автору задали в "школе" задание. Он ничего пока не знает и код в [10] понять не сможет. Пусть начинает с "Hello World", с изучения компонента TShape. Форму этого компонента задать легко. Цвет - придётся ещё кое-что изучить.


 
{RASkov} ©   (2007-09-26 03:21) [19]

> [18] Германн ©   (26.09.07 02:13)
> Пусть начинает с изучения компонента TShape.

Да пусть конечно же...., я не против, даже помогу ему немного :)

> [16] Джо ©   (26.09.07 02:06)

Сорри за "безобразия" :)

> smartleds
Вот разберайся:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

type
 TForm1 = class(TForm)
   procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 with TShape.Create(self) do begin
  Parent:=Self;
  Width:=50+Random(200);
  Height:=50+Random(200);
  Left:=X-Width div 2;
  Top:=Y-Height div 2;
  Shape:=TShapeType(Random(6)); //выберем случайный тип
  Brush.Color:=RGB(Random(255), Random(255), Random(255)); //"Случайно покрасим"
  OnMouseUp:=Shape1MouseUp;  //Присвоим обработчик.
 end;
end;

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 with (Sender as TShape) do begin //Обычно "здесь" еще и проверяют сендер, но в данном примере нет необходимости
  if Button=mbLeft then begin //Если левой кнопкой мыши то
   BringToFront;              // "поднимем" наверх
   Brush.Color:=clRed;        // и "покрасим" в красный
  end else begin              // во всех других случаях(правой, средней)
   SendToBack;                // "Опустим" ниже кан... в самый низ
   Brush.Color:=RGB(Random(255), Random(255), Random(255)); // "Разукрасим по полной"
  end;
 end;
end;

end.

....даже такое тяжело придумать начинающему.... и не только :о)


 
{RASkov} ©   (2007-09-26 03:22) [20]

> Вот разберайся

Т.е. разбирайся)


 
Германн ©   (2007-09-26 03:50) [21]

Я пожалуй предпочту молчание.  Оно ведь золото :-)


 
Anatoly Podgoretsky ©   (2007-09-26 07:47) [22]

> Германн  (26.09.2007 03:50:21)  [21]

А я пошел курить.
Тема одновременна простая и сложная.



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

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

Наверх





Память: 0.51 MB
Время: 0.049 c
2-1191237333
matt
2007-10-01 15:15
2007.10.21
Ini-файлы


15-1190111223
Галинка
2007-09-18 14:27
2007.10.21
Массивы переменной длины в Си


4-1176797461
pound
2007-04-17 12:11
2007.10.21
Как определить положение курсора в редактируемой ячейке в TString


15-1190466131
mikezubr
2007-09-22 17:02
2007.10.21
{$E .XXXXXXX}


15-1190362657
Vlad Oshin
2007-09-21 12:17
2007.10.21
Подскажите технологию или через чего делать





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