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

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

Программно создал 10 TImage.Как кликом мышки выделить конкретный [D6, WinXP]


studenttgata ©   (2008-07-09 14:28:00) 

Программно создал 10 объектов TImage.  Как кликом мышки получить выбранный  объект для  назначения дополнительных свойств (выделить ,  изменить параметры записи и самого объекта).
const
       DX=40;   //отступы от объектов
       DY=20;
type coord = record
       x:integer;
       y:integer;
       end;

type oborudovanie = record //итоговый класс, свойства которого необходимо уточнять
       activ:boolean;
       Q_Form:TImage;
       XY:coord;
       name:String;
       end;

type
      Procedure ClickI(Sender: TObject);  //объявление процедуры для определения  фокуса (фокус – выделенный объект, для назначения  дополнительных свойств)
 private
   { Private declarations }
 public
   { Public declarations }
   ArrayLine: array [0..sizeLine] of oborudovanie;  //массив элементов
 end;

PROCEDURE   TFORM1.CLICKI(SENDER: TOBJECT);
BEGIN
SHOWMESSAGE('NAME OBJECT ...');
END;

procedure PaintModul(Element:oborudovanie;FormParent:TForm;PopupM:TPopupMenu);
begin
  form1.LineCount:=Form1.LineCount+1;
  Element.XY.y:=Form1.Y_Start;   //начальные точки прорисовки объекта
  Element.XY.x:=Form1.X_Start;
  Element.Q_Form:=TImage.Create(FormParent);
  Element.Q_Form.Parent:=FormParent;
  Element.Q_Form.Left:=Element.XY.x;
  Element.Q_Form.Top:=Element.XY.y;
  Element.Q_Form.Height:=DY;
  Element.Q_Form.Width:=DX;
  Element.Q_Form.Cursor:=crHandPoint;
  Element.Q_Form.Canvas.Rectangle(0,0,DX,DY) ;
  Element.name:=Form1.Edit1.Text;
  Element.Q_Form.Canvas.TextOut(0,0,Element.name);
  Element.Q_Form.PopupMenu:=PopupM;
  Element.Q_Form.Transparent:=True;
  Element.Q_Form.Visible:=true;
  ELEMENT.Q_FORM.ONCLICK:=FORM1.CLICKI;
end;


Ega23   (2008-07-10 09:35:00) [1]


> смотрят на итог, а не на код.


это плохо.


brother   (2008-07-10 05:46:00) [2]

> смотрят на итог,

собственно и правильно, но если код ...., то потом в нем черт ногу сломит, ну и баги)


studenttgata   (2008-07-09 23:06:00) [3]

немного в понятияхпутаюсь, т.к. сам учусь. Люди, которым работу свою показываю, смотрят на итог, а не на код.
 так и боремся..


{RASkov}   (2008-07-09 15:16:00) [4]

> [0] studenttgata ©   (09.07.08 14:28)
> type oborudovanie = record //итоговый класс, свойства которого необходимо уточнять

Это не класс, это тип. Что-то ты путаешь очень сильно все....


> [11] studenttgata ©   (09.07.08 15:08)
> как мне их идентифицировать.

Да как угодно можно.... можно имя использовать, можно Tag, а можно и сам указатель на объект использовать...
Но в методе объекта оптимальнее [1] не найдешь....


oldman   (2008-07-09 15:15:00) [5]


> Как кликом мышки получить выбранный  объект для  назначения
> дополнительных свойств


Можно данную фразу перевести на русский язык?

Если ты не можешь разобраться в 10 объектах, так у них есть никому не нужное свойство tag.


studenttgata   (2008-07-09 15:15:00) [6]

спасибо всем!


studenttgata   (2008-07-09 15:10:00) [7]

если есть еще способы обращения к конкретным объектам... скажите, или предложенное {RASkov} есть оптимальным?


studenttgata   (2008-07-09 15:08:00) [8]

да.
клик нужен для того, чтоб произвольно, при необходимости можно было изменить параметры конкретного объекта.

{RASkov}, огромно благодарствую. получилось перемещать выбранные объекты. думаю, что дальше разберусь, как мне их идентифицировать.


Palladin   (2008-07-09 15:04:00) [9]


> studenttgata ©   (09.07.08 15:03) [9]

1. они у тебя уже созданы
2. при чем здесь событие клик?


studenttgata   (2008-07-09 15:03:00) [10]

после создания объектов необходимо залить их выбранным цветом, после чего, добавить их "вес" (почти транспортная задача для определения кратчайшего пути).


Palladin   (2008-07-09 14:57:00) [11]

во первых не класса, а объекта. во вторых для дальней работы где?


studenttgata   (2008-07-09 14:54:00) [12]

Может с помощью этих строк можно получить "копию" класса для дальнейшей работы, а в дальнейшем и узнать номер записи, в которой он находится. Если есть другие способы работы с произвольно выбранным (из 10 программно созданных объектов класса TImage, к примеру), то буду благодарен за подсказку..


{RASkov}   (2008-07-09 14:51:00) [13]

> [3] studenttgata ©   (09.07.08 14:43)

Смотри какая штука есть:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(TEdit(Sender).Text);
 ShowMessage(TButton(Sender).Caption);
 ShowMessage(IntToStr(TComponent(Sender).Tag));
 ShowMessage(TControl(Sender).Name);


//Но это не правильно, хотя для компилятора все ОК.
//Правильно это когда перед приведением проверить объект,
//на нужный нам тип. т.е. примерно так:

  if Sender is TButton then TButton(Sender).Caption:='New caption';
end;


Palladin   (2008-07-09 14:49:00) [14]


> var   O:TObject;      
> st:string;
> beginO:=Sender.Create;
> st:=Sender.ClassName;

и каков вселенский смысл этих строк?


studenttgata   (2008-07-09 14:47:00) [15]

var   O:TObject;
      st:string;
begin
O:=Sender.Create;
st:=Sender.ClassName;

Могу ли я из этих данных получить номер объекта, для дальнейшей работы с полями записи?


studenttgata   (2008-07-09 14:43:00) [16]

теоретически... созданные объекты должны сохранятся на протяжении всей программы. пробовал через Sender... но там могу получить только имя класса, на котором было выполнено нажатие.


{RASkov}   (2008-07-09 14:37:00) [17]

А код - лажа
Что за procedure PaintModul... Paint(прорисовка) и создание в нем(й) объектов без ихого там уничтожения - подозрительно. :)


{RASkov}   (2008-07-09 14:34:00) [18]

Смотри в сторону Sender'а в методах классов...
Т.е. Сендер и есть тот объект, кто вызвал данный метод....


Наверх

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