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

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

Сетка участников соревнований [D7, WinXP]


SmallCod ©   (2006-05-11 23:30:00) 

Вот приспичило сделать сетку участников соревнований в проге. И даже не имею понятия с чего начать. Сетка должна быть вида
1
    > 1
2
          > 1
3
   >  4
4
Обычная олимпийская система соревнований на выбывание. Сначала попарно участвуют "1" и "2", из которых выигрывает "1". Во второй паре выигрывает "4". В финале между ними выигрывает снова "1".
Количество участников на старте - всегда разное, но менее 40. Двойной клик на лейбле показывает, что данный участник, записанный в лейбле, выиграл и проходит в следующий тур соревнований.
Разместить Tlabel везде, сложности в управлении (описывать для каждого лейбла события - огромное количество процедур). Клонировать нужный объект - так не знаю, как управлять созданными лейблами, как приписать им событие, к примеру по двойному клику на лейбле запустить нужную процедуру.
Подскажите что - нибудь.


SmallCod   (2006-05-19 00:28:00) [1]

Нашел способ.
Вопросов больше нет.


SmallCod   (2006-05-15 22:56:00) [2]

Сроки поджимают :( А нигде про присвоение созданному компоненту событий найти не смог. Покажите хоть какой нить левый рабочий пример такого присвоения.


SmallCod   (2006-05-14 17:36:00) [3]

Сорри, если слишком сложно выражался... первый пост был для получения предложений реализации (или через динамическое создание лейблов или через статическое размещение максимально возможного для сетки количества лейблов и тд). Перефразирую попроще и в более частном порядке, так как другие вопросы уже отпали.

Есть лейбл. Много лейблов (все они как результат первого через Create), расплоложенных вертикально.
Если на первом исходном лейбле кликнуть - рядом появится другой под диагонали, задается через вкладку Events.
Задача.
Как присвоить создающимися лейблам на onClick вызов процедуры!


Sergio77   (2006-05-13 20:46:00) [4]

тебе нужна прога для жеребьевки ил что?
не понятно...


SmallCod   (2006-05-13 16:27:00) [5]

С созданием компонентов  немного разобрался. А вот унаследование событий так и не получается.

procedure TForm1.ClickComp(Sender: TObject);
var
 ControlText: string;
begin
 with TControlClass (Sender.ClassType).Create (self) do
 begin
   Parent := (Sender as TControl).Parent;
   Left := (Sender as TControl).Left;
   Top := (Sender as TControl).Top + 20;
    onclick:=ClickComp;
   SetLength (ControlText, 50);
   (Sender as TControl).GetTextBuf(PChar(ControlText), 50);
   ControlText := PChar(ControlText);
   SetTextBuf (PChar (ControlText));
 end;
end;  


Что не так? Как унаследовать событие? Хочу чтобы созданный Label на событие onClick также плодился.


AlexWlad   (2006-05-12 18:39:00) [6]

Информация об участнике - TPlayer.
Массив №1 - Участники - array[...] of TPlayer
Тур соревнования -

TTour record
  p1 : TPlayer;
  p2 : TPlayer;
  winner : TPlayer;
end;

Массив №2 - Туры - array of TTour

Первый тур заполняется вручную, остальные - на основе winner'ов из первого.

Отображать проще в StringGrid или ListView в режиме vsReport.
Но лучше самому рисовать например на Image, используя для вычисления позиций "виртуальную сетку".


Сергей М.   (2006-05-12 13:34:00) [7]


> 1) Возможно ли созданному лейблу приписать событие? Если
> возможно, то как?


Возможно.

СозданныйЛейбл := TLabel.Create(компонент-владелец);
СозданныйЛейбл.Parent := любой компонент-наследник TWinControl, который будет отвечать за обработку сообщений для TLabel
СозданныйЛейбл.OnClick := Идентификатор метода существующего объекта любого класса, имеющий прототип TNotifyEvent (например, TMyForm.MouseClickHandler(Sender: TObject))


> 2) Как идентифицировать созданный объект?


Любой TLabel имеет св-во Tag.

Напимер, в теле метода TMyForm.MouseClickHandler:

if Sender is TLabel then
 with TLabel(Sender) do
   case Tag of
      ТакойТоТэг: Такой То Лейбл "щелкнули";
      ДругойТэг:   Другой Лейбл "щелкнули";
      ..
   end;


Плохиш   (2006-05-12 13:22:00) [8]


> SmallCod ©   (12.05.06 13:06) [7]
> Спасиб за дельные советы. Проблема в создании массива элементов
> и их идентификации.
> 1) Возможно ли созданному лейблу приписать событие?

Да, события - это свойства процедурального типа.

> Если возможно, то как?

С помощью операции присваивания :=

> 2) Как идентифицировать созданный объект?

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

PS. Если бы Вы выполнили рекомендации, данные в [1], [4] и [5], то с вероятностью 90% эта ветка была бы не нужна. А так объяснить Вам что-либо очень сложно из-за отсутствия у Вас базовых знаний :-(


SmallCod   (2006-05-12 13:06:00) [9]

Спасиб за дельные советы. Проблема в создании массива элементов и их идентификации.
1) Возможно ли созданному лейблу приписать событие? Если возможно, то как?
2) Как идентифицировать созданный объект?

_RusLAN. В вашем примере какое будет имя созданного объекта?


REA   (2006-05-12 11:58:00) [10]

>Мое слабое место - Create
Ну это еще полбеды - у некоторых слабое место Destroy.


_RusLAN   (2006-05-12 11:31:00) [11]

SmallCod ©   (12.05.06 1:32) [2]
Мое слабое место - Create


var l: TLabel;
...
// frmMain - форма куда помещается label;
l:= TLabel.Create(frmMain);
l.Parent := frmMain;
l.Left := 530;
l.Left := 200;
l.Caption := 'dlfsdlfl';

но чтобы устранить причину проблемы то
Eraser ©   (11.05.06 23:51) [1]
покупайте книгу по паскалю.

+
balepa ©   (12.05.06 7:45) [4]
покупайте книжку по Delphi


balepa   (2006-05-12 07:45:00) [12]


> SmallCod ©   (12.05.06 01:32) [2]
>
> > покупайте книгу по паскалю.
> Тоже весьма разумно. Вроде пишу про Tlabel, диктуетe Pascal.
>
>
> Мое слабое место - Create. И толком понять, как его применить
> к созданию нового лейбла, а также приписать ему событие,
>  к примеру, OnClick, я не знаю.

Ну покупайте книжку по Delphi


antonn   (2006-05-12 07:38:00) [13]

можно на TBitmap рендерить:)
самому.


SmallCod   (2006-05-12 01:32:00) [14]


> я так понял нужно за-вас написать программу?
>
Не правильно Вы поняли. Читайте последнее предложение внимательнее! Мне нужен совет, а не Ваша работа!

> покупайте книгу по паскалю.
Тоже весьма разумно. Вроде пишу про Tlabel, диктуетe Pascal.

Мое слабое место - Create. И толком понять, как его применить к созданию нового лейбла, а также приписать ему событие, к примеру, OnClick, я не знаю.


Eraser   (2006-05-11 23:51:00) [15]


> SmallCod ©   (11.05.06 23:30)

я так понял нужно за-вас написать программу?

> Подскажите что - нибудь.

покупайте книгу по паскалю.


Наверх

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