![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Господа еще один вопрос , сделал я на форме массив компонентов
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).