|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Клонировать компоненты
здравствуйте... на форме задан какой-либо компонент (например label) необходимо создать еще таких же компонентов несколько и обрабатывать их на события OnClick и OnMouseMove.
помогите осуществить данную вещь.. |
#2
|
|||
|
|||
в каком режиме - выполнения или дизайна?
|
#3
|
|||
|
|||
выполнения
ну не редактирования.. чтобы программно создавать компонент.. уже во время выполнения программы.. и после чего обрабатывать на события.. |
#4
|
|||
|
|||
Ну и создавай их.
Пусть label1 уже есть. тогда создание так: Код:
var I : Integer; ANewLabel : TLabel; begin For I := 1 To 10 Do // make 10 labels Begin ANewLabel := TLabel.Create(Self); ANewLabel.Parent := Self; ANewLabel.Top := Random(100); ANewLabel.Left := Tandom(300); ANewLabel.Caption := 'label #' + InttoStr(I); ANewLabel.OnClick := Label1.OnClick; ANewLabel.OnMouseMove := Label1.OnMouseMove; End; end; |
#5
|
|||
|
|||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); Procedure ClickObj(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} Procedure TFOrm1.ClickObj(Sender: Tobject); begin ShowMessage('Тут обработка'); end; procedure TForm1.Button1Click(Sender: TObject); var obj: TLabel; begin obj := TLabel.Create(Label1); obj.Caption:='Лейбел 1'; obj.Parent := Self; obj.Left:= Label1.Left+40; obj.Top:= Label1.Top+20; obj.OnClick := ClickObj; end; end. Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |
#6
|
|||
|
|||
спасибо, надеюсь поможет)
|
#7
|
|||
|
|||
подскажите пожалуйста, как получить сам объект, на который навели мышью или кликнули...
пишу игрушку (чисто для себя) создается некий label с текстом "." и эти точки движуться по экрану.. надо кликать на каждую и этим самым этот компонент исчезает с формы (для этого ведь необходимо сначала узнать какой элемент должен исчезнуть, да и сколько их на форме неизвестно, т.к. они в рандомном порядке прибавляются через определенный интервал времени). если точки зашли за данную площадь, то идет отсчет жизней назад (за каждую прошедшую точку). Так же должны будут организовываться бонусы.. Например разноцветные цифры бегут по форме. При наведении на них мышью идёт суммирование очков (по значению на этом лебеле). Далее та цифра пропадает. Так же и жизни чтобы были. Но достаточно мне просто сказать как получить управление над кликнутым элементом а остальное я смогу сам сделать... Нужно ведь как-то получить элемент. Это не массив и индекса там нет, по этому надо другим каким-либо способом получить элемент.. Подскажите, каким? |
#8
|
|||
|
|||
вот например мы указываем некий класс элементу
obj := TLabel.Create(Label1); label1 как я понял. но по моей идее надо так: label[n+1] но так нельзя наверное.. где n это индекс.. ведь мы не знаем сколько label'ов там будет.. да и не писать же в коде: label1 label2 label3 label4 label5 label6 ... label100 если будет 100 элементов.. или надо каждый label запихать в массив? (да я и динамические массивы не знаю, а ведь число label'ов растет) |
#9
|
|||
|
|||
неужели нет возможности указать это всё? 0_о
|
#10
|
|||
|
|||
Если я тебя прально понял... :
При создании объекта приравниваем его тег к его порядковому номеру... Код:
... var ObjLabel : TLabel; ... For I{это и есть порядковый номер}:= 0 to 100 do begin ObjLabel := TLabel.Create...// ну это и до меня написано ... ObjLabel.Tag := I;//прировняли... ... [code]procedure TLabelClick.....// здесь надо что то с Sender'ом мутить написанно было в книжке, но с собой нет это было на форуме {если будешь делать разные события для лабелов(что делать не советую) то...} If TLabel.Tag = 5 then ...// ну дальше понятно...[code] Если закончишь выложи код... нужная вещь... СОВЕТ! : Я б на твоем месте использовал Canvas т. к. там намного удобней...(в твоем случае все будет без мерцания!) =) Если прально сделать... Я ни в чем никогда не уверен... И в этом тоже... |
#11
|
|||
|
|||
я канвас не очень знаю =) я может почитаю пару статей сегодня
... ObjLabel.Tag := I;//прировняли... ... и как выдрать из ObjLabel.Tag нужный label? или TLabel.Tag = 5 он и есть? где 5 это номер самого label'а |
#12
|
|||
|
|||
Цитата:
Тут такое дело менять все свойства объекта (Label.Left.. top.. font..) можно через массив... Код:
ObjLabel[6].Top := ObjLabel[6].Top + 15; // "опустим"(=)) надпись на 15 пикселей вниз... Допустим: 1. У нас 32 Label (или массив из них...) 2. У них у всех различные позиции... (Top & Left) 3. По клику на каждую из них ее надо удалить... Для 3 этапа(первые 2 вроде понятны...) надо созать процедуру-обработчик события OnClick для класса TLabel (то есть обрабатываться будет при клике на абсалбтно любом объекте типа TLabel, поэтому начинать "раздовать" Tag'и лучше с 1...) Код:
procedure TLabelOnClick // это надо ручками писать ... // в этом участке неточности ... завтра исправлю... Код:
ObjLabel[TLabel.Tag].Destroy; {а может и sender завтра уточню} С канвасом могу помочь (знаний для этого момента хватает...) пиши в личку, а лучше в асю... -------------------------------------------------------------------------- P.S. В этом коде допущенны ошибки... найду книжку - исправлю Я ни в чем никогда не уверен... И в этом тоже... |
#13
|
|||
|
|||
ошибки не беда
ты аську свою оставь в личку (просто при нажатии ICQ на форуме, вылезает окно "страница не найдена". Либо опера глючит, либо форум не в порядке). |
#14
|
|||
|
|||
Компоненты создавай использую Массив
вот тебе и индекс labelar : array[0..10] of TLabel; // сор не вник нормально, что там предлогал Interface, посмотрел, что там все tag да tag Delphi - это лишь инструмент, а что ты сможешь создать при помощи этого инструмента, зависит исключительно от тебя. Последний раз редактировалось Alexo, 16.11.2008 в 21:46. |
#15
|
|||
|
|||
не знал что можно строить массив из компонентов
с тагами все понятно, только немного грамозко... лучше конечно-же канвасом делать игру но спасибо за совет) только мне непонятно как каждому элементу событие представить, как их отобразить на форме, и как определить к какому именно элементу обращаются при клике на него )) |