Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2013, 10:59   #1
Rilmeer
 
Регистрация: 05.06.2013
Сообщений: 5
По умолчанию Взаимодействие динамически созданных кнопок

Всем привет. Суть проблемы такая: я динамически создал для неких нужд 2 кнопки, создал для них события. С этим всё в порядке, но у меня в кач-ве дополнительного выделения активной кнопки используется толщина шрифта, так вот при нажатии на нединамически созданные кнопки динамисески созданные нормально развыделяются, также при нажатии на вторую динамическую первая развыделяется, но при нажатии на первую динамическую она срабатывает (выделяется), но вторая так и остается жирной.
Код просматривал много раз- вроде без глупостей (типо перепутать идентификаторы местами и тд). Ткните носом плиз.
Код:
if tag=1 then begin//тег первой кнопки
if not(fsbold in newt[1].Font.Style) then begin//выделяем её
newt[1].Font.Style:=newt[1].Font.Style+[fsbold];
//остальные кнопки
if fsbold in button2.Font.Style  then
button2.Font.Style:=button2.Font.Style-[fsbold];
if fsbold in button3.Font.Style  then
button3.Font.Style:=button3.Font.Style-[fsbold];
if fsbold in button4.Font.Style  then
button4.Font.Style:=button4.Font.Style-[fsbold];
if fsbold in button5.Font.Style  then
button5.Font.Style:=button5.Font.Style-[fsbold];
if fsbold in button6.Font.Style  then
button6.Font.Style:=button6.Font.Style-[fsbold];
if fsbold in button7.Font.Style  then
button7.Font.Style:=button7.Font.Style-[fsbold];
if fsbold in newt[2].Font.Style  then//развыделяем вторую кнопку
newt[2].Font.Style:=newt[2].Font.Style-[fsbold];
end;
end
else begin//эта кнопка работает отлично
if not(fsbold in newt[2].Font.Style) then begin
newt[2].Font.Style:=newt[2].Font.Style+[fsbold];
//остальные кнопки
if fsbold in button2.Font.Style  then
button2.Font.Style:=button2.Font.Style-[fsbold];
if fsbold in button3.Font.Style  then
button3.Font.Style:=button3.Font.Style-[fsbold];
if fsbold in button4.Font.Style  then
button4.Font.Style:=button4.Font.Style-[fsbold];
if fsbold in button5.Font.Style  then
button5.Font.Style:=button5.Font.Style-[fsbold];
if fsbold in button6.Font.Style  then
button6.Font.Style:=button6.Font.Style-[fsbold];
if fsbold in button7.Font.Style  then
button7.Font.Style:=button7.Font.Style-[fsbold];
if fsbold in newt[1].Font.Style  then
newt[1].Font.Style:=newt[1].Font.Style-[fsbold];
end;
end;
Rilmeer вне форума Ответить с цитированием
Старый 05.06.2013, 19:31   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
if tag=1 then begin//тег первой кнопки
какой такой?
откуда взялась эта переменная tag? по коду не видно.

можно сделать проще (без всяких проверок)
Код:
// сбрасываем ВСЕ кнопки без исключения
    newt[1].Font.Style:=newt[1].Font.Style-[fsbold];
    button2.Font.Style:=button2.Font.Style-[fsbold];
    button3.Font.Style:=button3.Font.Style-[fsbold];
    button4.Font.Style:=button4.Font.Style-[fsbold];
    button5.Font.Style:=button5.Font.Style-[fsbold];
    button6.Font.Style:=button6.Font.Style-[fsbold];
    button7.Font.Style:=button7.Font.Style-[fsbold];
    newt[2].Font.Style:=newt[2].Font.Style-[fsbold];
// для той кнопки какую нажали выставили
// sender 'это именно тот объект (та кнопка) которую нажали
  (sender as TButton).font.Style:=(sender as TButton).Font.Stype +[fsbold];
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 07.06.2013, 08:32   #3
Rilmeer
 
Регистрация: 05.06.2013
Сообщений: 5
По умолчанию

Я сделал по вашему примеру- ничего не изменилось. Даже если просто вставить в код первой кнопки одну строку newt[2].Font.style:=newt[2].Font.style-[fsbold];
, то по-прежнему вторая не развыделяется.
Rilmeer вне форума Ответить с цитированием
Старый 07.06.2013, 12:24   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
я динамически создал для неких нужд 2 кнопки, создал для них события
покажите весь код создания и настройки оных.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 07.06.2013, 13:42   #5
Rilmeer
 
Регистрация: 05.06.2013
Сообщений: 5
По умолчанию

Генерация самой кнопки
Код:
inc(nbut);
newt[nbut]:=tbutton.Create(form1);
newt[nbut].Parent:=form1;
newt[nbut].caption:=e.Text;
if nbut=1 then //nbut служит для определения первая или вторая кнопка сейчас создаётся (максимум 2 какраз)
newt[nbut].OnClick:=newt1Click //если кнопка одна, то для неё 
выполняется только это событие (есть мнение, что срабатывает всегда это событие для 1ой кнопки, отсюда и последствие)
else
newt[nbut].OnClick:=newt2Click;// если две, то для обоих вып-ся это
newt[nbut].Top:=168;
newt[nbut].Height:=18;
события. С распределением по событиям может и тупо, но иначе у меня вылезала ошибка при 1ой созданной кнопке (ведь ссылка на развыделение второй присутствовала)
Код:
procedure TForm1.newt1Click (Sender: TObject);  //если создана одна кнопка
begin
if not(fsbold in newt[1].Font.Style) then begin
newt[1].Font.Style:=newt[1].Font.Style+[fsbold];
if fsbold in button2.Font.Style  then
button2.Font.Style:=button2.Font.Style-[fsbold];
if fsbold in button3.Font.Style  then
button3.Font.Style:=button3.Font.Style-[fsbold];
if fsbold in button4.Font.Style  then
button4.Font.Style:=button4.Font.Style-[fsbold];
if fsbold in button5.Font.Style  then
button5.Font.Style:=button5.Font.Style-[fsbold];
if fsbold in button6.Font.Style  then
button6.Font.Style:=button6.Font.Style-[fsbold];
if fsbold in button7.Font.Style  then
button7.Font.Style:=button7.Font.Style-[fsbold];
end;
end;
procedure TForm1.newt2Click (Sender: TObject);// если создано 2 кнопки. ваш вариант кода
begin
newt[1].Font.style:=newt[1].Font.style-[fsbold];
button2.Font.Style:=button2.Font.Style-[fsbold];
newt[2].Font.style:=newt[2].Font.style-[fsbold];
button3.Font.Style:=button3.Font.Style-[fsbold];

button4.Font.Style:=button4.Font.Style-[fsbold];

button5.Font.Style:=button5.Font.Style-[fsbold];

button6.Font.Style:=button6.Font.Style-[fsbold];

button7.Font.Style:=button7.Font.Style-[fsbold];
(sender as TButton).font.Style:=(sender as TButton).Font.Style +[fsbold];
Nbut:integer; newt: array[1..2] of tButton;- описаны в переменных вверху на всю форму,
события newt1Click и newt2Click описаны в паблике.
Rilmeer вне форума Ответить с цитированием
Старый 07.06.2013, 13:51   #6
Rilmeer
 
Регистрация: 05.06.2013
Сообщений: 5
По умолчанию

ёкарный бабай) . сейчас читал своё сообщение и сам понял суть)
inc(nbut);
newt[nbut]:=tbutton.Create(form1);
newt[nbut].Parent:=form1;
newt[nbut].caption:=e.Text;
if nbut=1 then
newt[nbut].OnClick:=newt1Click
else
newt[nbut].OnClick:=newt2Click
при втором нажатии (когда задаётся событие для 2х кнопок) nbut уже =2, а значит уже не указывает на первую кнопку (newt[1]), тоесть для неё событие остаётся по-прежнему newt1Click
Rilmeer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработчик динамически созданных кнопок andir Общие вопросы Delphi 5 02.03.2013 18:11
Уничтожение массива динамически созданных компонентов AndrzejX Компоненты Delphi 2 29.05.2012 19:41
перетаскивание динамически созданных объектов kaizer131 Общие вопросы Delphi 13 15.06.2011 07:59
Сохранение динамически созданных объектов Marsel737 Общие вопросы Delphi 25 15.12.2009 14:24
Свойства динамически созданных объектов. Dorithur Общие вопросы Delphi 4 12.12.2009 15:35