Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Вниз

Сетка участников соревнований   Найти похожие ветки 

 
SmallCod ©   (2006-05-11 23:30) [0]

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


 
Eraser ©   (2006-05-11 23:51) [1]


> SmallCod ©   (11.05.06 23:30)

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

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

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


 
SmallCod ©   (2006-05-12 01:32) [2]


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

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

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


 
antonn ©   (2006-05-12 07:38) [3]

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


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


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

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


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

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


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

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


 
SmallCod ©   (2006-05-12 13:06) [7]

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

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


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


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

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

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

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

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

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

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


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


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


 
AlexWlad ©   (2006-05-12 18:39) [10]

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

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

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

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

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


 
SmallCod ©   (2006-05-13 16:27) [11]

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

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 также плодился.


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

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


 
SmallCod ©   (2006-05-14 17:36) [13]

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

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


 
SmallCod ©   (2006-05-15 22:56) [14]

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


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

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



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

Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
4-1142026212
TheEd
2006-03-11 00:30
2006.06.04
ShellExecute(Handle, open ,PCHAR(EMAIL),... - EMAIL c пробелами


2-1147752264
rubey
2006-05-16 08:04
2006.06.04
Ввод через DBGRID


4-1142155221
Handle
2006-03-12 12:20
2006.06.04
Снова процессы


2-1147694454
Piero
2006-05-15 16:00
2006.06.04
Пароль к БД


6-1138550739
Storm
2006-01-29 19:05
2006.06.04
Шлюз на Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский