Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.10;
Скачать: CL | DM;

Вниз

Программно создал 10 TImage.Как кликом мышки выделить конкретный   Найти похожие ветки 

 
studenttgata ©   (2008-07-09 14:28) [0]

Программно создал 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;


 
{RASkov} ©   (2008-07-09 14:34) [1]

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


 
{RASkov} ©   (2008-07-09 14:37) [2]

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


 
studenttgata ©   (2008-07-09 14:43) [3]

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


 
studenttgata ©   (2008-07-09 14:47) [4]

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

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


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


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

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


 
{RASkov} ©   (2008-07-09 14:51) [6]

> [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;


 
studenttgata ©   (2008-07-09 14:54) [7]

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


 
Palladin ©   (2008-07-09 14:57) [8]

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


 
studenttgata ©   (2008-07-09 15:03) [9]

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


 
Palladin ©   (2008-07-09 15:04) [10]


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

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


 
studenttgata ©   (2008-07-09 15:08) [11]

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

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


 
studenttgata ©   (2008-07-09 15:10) [12]

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


 
studenttgata ©   (2008-07-09 15:15) [13]

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


 
oldman ©   (2008-07-09 15:15) [14]


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


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

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


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

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

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


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

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


 
studenttgata ©   (2008-07-09 23:06) [16]

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


 
brother ©   (2008-07-10 05:46) [17]

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

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


 
Ega23 ©   (2008-07-10 09:35) [18]


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


это плохо.



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

Текущий архив: 2008.08.10;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
15-1214478638
denic
2008-06-26 15:10
2008.08.10
Футбол на работе.


2-1215334184
Циркуль
2008-07-06 12:49
2008.08.10
Печатаются крякозябры


2-1215411081
iSODEv
2008-07-07 10:11
2008.08.10
мерцает PaintBox


15-1213898858
Knight
2008-06-19 22:07
2008.08.10
Железячники, что можно установить на MB Asus A7V600-X ?


2-1215686856
TUserClass
2008-07-10 14:47
2008.08.10
Установить поле соответствия (Lookup := true) в DataSet ...