![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 ![]() Последний раз редактировалось Alexo, 16.11.2008 в 21:46. |
|
#15
|
|||
|
|||
|
не знал что можно строить массив из компонентов
![]() с тагами все понятно, только немного грамозко... лучше конечно-же канвасом делать игру но спасибо за совет)только мне непонятно как каждому элементу событие представить, как их отобразить на форме, и как определить к какому именно элементу обращаются при клике на него )) |