Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Господа еще один вопрос , сделал я на форме массив компонентов


Страницы:   1 2

smartleds ©   (2007-09-26 15:14:00) 

Shape , каждый раз при нажатии кнопки прорисовывается на форме новый компонент Shape

var i:integer;
  ArrOfShape:array of TShape;

procedure TForm1.Button3Click(Sender: TObject);
begin
i:=i+1;
SetLength(ArrOfShape,i);
ArrOfShape[i-1]:=TShape.Create(self);
ArrOfShape[i-1].Parent:=Form1;
ArrOfShape[i-1].Width:=20;
ArrOfShape[i-1].Height:=20;
 ArrOfShape[i-1].Left:=X;
 ArrOfShape[i-1].Top:=Y;
  X:=X+40;
 ArrOfShape[i-1].Brush.Color:=RGB(TrackBar1.Position,TrackBar2.Position,TrackBar3.Position);
 OnMouseUp:=Shape1MouseUp;  

end;
У всех этих Shape разный цвет.
Теперь нужно кликнув мышкой на нужный Shape получить его цвет, как это сделать?
Остался один момент как


Германн   (2007-09-26 15:51:00) [21]


> smartleds   (26.09.07 15:47) [11]
>
> Получилась так, но цвет считывается только у последнего
> Shape, и то только когда я кликаю на форму , а не на него.
>  

Ну а чего ждать, если у тебя:

>  OnMouseUp:=Shape1MouseUp;  
>


smartleds   (2007-09-26 15:50:00) [22]

Не, массив будет нужен потом , когда пользователь отрегулирует все цвета в Shapах , из этого массива  Shapoв данные о цвете каждого Shape будут считаны  и дальше на обработку.


Германн   (2007-09-26 15:49:00) [23]


> Ты прикалываешься? Зачем ему нужено знать «какой у него
> индекс в массиве»?

Нет. Отвечаю строгона вопрос.


smartleds   (2007-09-26 15:47:00) [24]

Получилась так, но цвет считывается только у последнего Shape, и то только когда я кликаю на форму , а не на него.

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
if Sender is TShape then
RGBmix:=(Sender as TShape).Brush.Color;
R:=RGBmix mod 256;
G:=(RGBmix div 256) mod 256;
B:=RGBmix div 65536;

Memo1.Lines.Append('R='+Inttostr(R)+','+' '+
                  'G='+Inttostr(G)+','+' '+
                  'B='+Inttostr(B));

end;

end.


Kolan   (2007-09-26 15:43:00) [25]


> Но сендер-то не знает пока какой у него индекс в массиве.

Ты прикалываешься? Зачем ему нужено знать «какой у него индекс в массиве»?

ЗЫ
 Да и массив тоже не нужон в принципе.


Германн   (2007-09-26 15:39:00) [26]


> Вася Правильный   (26.09.07 15:36) [6]

Но сендер-то не знает пока какой у него индекс в массиве.


Вася Правильный   (2007-09-26 15:38:00) [27]

и у тебя сработает не на клик (нажатие), а на ОТклик (отжатие)


Kolan   (2007-09-26 15:37:00) [28]

> но тут еще должен быть элнемент ArrOfShape на который кликнули
> мышью

Он у тебя есть!
procedure TForm1.Shape1MouseUp( Sender: TObject;Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);


Обратится к нему можно так:

if Sender is TShape then
 (Sender as TShape).Brush.Color


Вася Правильный   (2007-09-26 15:36:00) [29]

как нужно указать с какого элемента Shape
еще раз - у сендера


Германн   (2007-09-26 15:36:00) [30]


> Помогите разобраться как нужно указать с какого элемента
> Shape из массива ArrOfShape[] считывается цвет?

А пока никак не получится.


smartleds   (2007-09-26 15:33:00) [31]

Господа , глянте если не трудно , написал обработчик Shape1MouseUp
который считывает цвет, у выбранного Shape ?
Помогите разобраться как нужно указать с какого элемента Shape из массива ArrOfShape[] считывается цвет?
Я написал RGBmix:=Brush.Color; , но тут еще должен быть элнемент ArrOfShape на который кликнули мышью.
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
RGBmix:=Brush.Color;
R:=RGBmix mod 256;
G:=(RGBmix div 256) mod 256;
B:=RGBmix div 65536;

Memo1.Lines.Append('R='+Inttostr(R)+','+' '+
                  'G='+Inttostr(G)+','+' '+
                  'B='+Inttostr(B));

end;


Германн   (2007-09-26 15:23:00) [32]


> smartleds   (26.09.07 15:14)

О! Продвижение вперед уже очевидно. Вот бы еще выкинуть несколько ненужных глобальных переменных, так и совсем бы было хорошо.


Вася Правильный   (2007-09-26 15:17:00) [33]

прочитать Brush.Color у сендера


Kolan   (2007-09-26 15:15:00) [34]

Ну в
> Shape1MouseUp;  


Получаешь цвет(Color).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо