Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив из кнопок. Можно ли создать? 
:(
    Опции темы
Nikolasha
Дата 11.12.2005, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.5.2005

Репутация: нет
Всего: нет



Привет всем.
Возник вопросик, можно ли создать массив из TSpeedButton'ов?(Для удобства работы - морской бой) Мне нужно создать два таких массива по 100 элементов (10х10). Можно ли это организовать? Я читал в DRKB по массив чекбоксов. Но чего то с баттонами не работает. Помогите, пожалуйста.
Заранее спасибо.
PM MAIL   Вверх
FRAGNATIC
Дата 11.12.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: 6
Всего: 11



конечно можно=)
ток зачем тебе для морского боя 200 кнопок? может лучше сделать фон ввиде картинке и на ней дапустим рисовать чёнить типа при нажатии и если мимо то просто крестик нарисовать =)))


Это сообщение отредактировал(а) FRAGNATIC - 11.12.2005, 19:32
PM MAIL   Вверх
FRAGNATIC
Дата 11.12.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: 6
Всего: 11



Код

var
  btns: array [1..10] of TButton;
  i: integer;
begin
  for i:=low(btns) to high(btns) do
  begin
    btns[i]:=TButton.Create(form1);
    btns[i].Width:=10;
    btns[i].Height:=10;
    btns[i].Top:=10*i;
    btns[i].Left:=10;
    form1.InsertControl(btns[i]);
  end;
end;

что-то типа этого
тока не забудь их потом все удалить (free )
а для этого масив лучше сделать глобальной переменой )
PM MAIL   Вверх
Poseidon
Дата 11.12.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Nikolasha @ 11.12.2005, 19:08)
можно ли создать массив из TSpeedButton'ов

Цитата(FRAGNATIC @ 11.12.2005, 19:40)
btns: array [1..10] of TButton;
...
btns[i]:=TButton.Create(form1);
smile
Наверное правельнее будет
Код
btns: array [1..10] of TSpeedButton;

Код
btns[i]:=TSpeedButton.Create(form1);




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
FRAGNATIC
Дата 11.12.2005, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: 6
Всего: 11



Poseidon
а разница?
я пример привёл
а там уже хоть из чего угодно делай)
PM MAIL   Вверх
Nikolasha
Дата 13.12.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.5.2005

Репутация: нет
Всего: нет



Спасибо за ответы. Только вот нужен двумерный массив.
Еще один вопрос. у меня случайным образом генериться массив кораблей следующего типа:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0 0 0
1 0 1 1 1 1 0 0 1 0
0 0 0 0 0 0 0 0 1 0
1 0 1 0 1 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0

В нем, соответственно, еденички отвечают за палубы у корабликов. На форме лежат 10х10(=100 ) кнопок. Как можно организовать чтобы на кнопочках кот. соответствует еденичка появилась определенная картинка?
PM MAIL   Вверх
Rennigth
Дата 13.12.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Nikolasha
ну если чтоб попроще то создавай массив из кнопок 10X10 и у них есть property Tag, в нем можешь хранить значения 0/1(палуба/море) .
Добавлено @ 22:15
ну и соответственно картикнки грузить в зависимости от этого значения.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Nikolasha
Дата 13.12.2005, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.5.2005

Репутация: нет
Всего: нет



А каким образом этот массив разместиться на форме где мне нужно?
PM MAIL   Вверх
YurikGL
Дата 13.12.2005, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
А каким образом этот массив разместиться на форме где мне нужно?


уже было....

Цитата
btns[i].Width:=10;
btns[i].Height:=10;
btns[i].Top:=10*i;
btns[i].Left:=10;

--------------------
 
PM MAIL WWW ICQ   Вверх
sexton
Дата 14.12.2005, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



Думаю в данной ситуации StringGrid бы вполне подошел вместо такго дикого количесвта кнопок.
PM MAIL WWW ICQ   Вверх
Nikolasha
Дата 14.12.2005, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.5.2005

Репутация: нет
Всего: нет



Спасибо, все получилось.
Еще один вопрос: как можно теперь обрабатывать события onclick для этих кнопок (можно ли как нибудь использовать as Sender)?
Добавлено @ 17:05
Код

for i:=low(btns) to high(btns) do
  begin
    btns[i]:=TSpeedButton.Create(form1);
    btns[i].Width:=33;
    btns[i].Height:=33;
    btns[i].Top:=(33*(((i-1) div 10)+1));
    btns[i].Left:=33*(i-(((i-1) div 10)*10)) ;
    form1.InsertControl(btns[i]);
  end;

Вот код для того, чтобы кнопочки встали в квадрат 10x10.

И еще вопрос. Как с этот массив убрать из памяти? с помощью free можно? Если да, то как?
PM MAIL   Вверх
FRAGNATIC
Дата 14.12.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: 6
Всего: 11



Код

procedure TForm1.BtnClick(Sender: TObject);
begin
  showmessage(IntToStr(TButton(sender).Tag ));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  btns: array [1..10] of TButton;
  i: integer;
begin
  for i:=low(btns) to high(btns) do
  begin
    btns[i]:=TButton.Create(form1);
    btns[i].Width:=10;
    btns[i].Height:=10;
    btns[i].Top:=10*i;
    btns[i].Left:=10;
    btns[i].Tag:=i;
    btns[i].OnClick:=BtnClick;
    form1.InsertControl(btns[i]);
  end;
end;


TButton(sender) делай с ним что хош
насчёт освобождения поидеи должен сам освобождатся тк кнопки лежат на форме
ну или просто мож в цикле FRee
PM MAIL   Вверх
Nikolasha
Дата 14.12.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.5.2005

Репутация: нет
Всего: нет



Не пашет, на стадии компиляции выдает ошибку следущего содержания:
Expected an identifier but invalid character character #160 found

smile
Что не так? smile
PM MAIL   Вверх
Демо
Дата 14.12.2005, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Я бы рекомендовал использовать TImage - 100 штук. либо TImageList.
В этом случае ты без проблем на TImsage можешь рисовать все, что угодно, на каждом обрабатывать OnClick.
Да и выглядеть будет красивее, по-моему.



--------------------
    
PM MAIL ICQ Skype   Вверх
THenry
Дата 14.12.2005, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 13.9.2005

Репутация: нет
Всего: нет



Писал такую штуку тока на С++ в StringGrid. Удобно и проще некуда.

P.S. А как насчет того что вокруг корабля на расстоянии одной клетки не может быть другого корабля? А твоя маска поля боя это не предусматривает, добавь еще вокруг каждого корабля "оградку" к примеру -1
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.