0 / 0 / 0
Регистрация: 29.06.2015
Сообщений: 12
|
|
1 | |
ABCButtons и импровизированные окна GraphABC29.06.2015, 18:16. Показов 3627. Ответов 10
Метки нет (Все метки)
Есть меню из ABCButtons. Есть импровизированное окно GraphABC с кнопками ABCButtons, которое запускается при выборе одного из пунктов. Проблема в том, что кнопки меню накладываются поверх окна.
Код
uses ABCButtons, GraphABC, ABCObjects; var GN: string; w,h,btn1: integer; ifs: boolean; mm: Picture; NewGW: RectangleABC; procedure init; begin GN:='Space Program'; w:=640; h:=480; ifs:=true; SetWindowCaption (GN); SetWindowSize(w,h); CenterWindow; SetWindowIsFixedSize(ifs); end; procedure NGWS; begin NewGW:=new RectangleABC(100,100,440,200); NewGW.Text:='ВНИМАНИЕ!'; var BtnNext:= new ButtonABC(120,250,150,40,'Продолжить',clMoneyGreen); var BtnBack:= new ButtonABC(370,250,150,40,'Назад',clMoneyGreen); end; procedure GameMenu; forward; procedure NGW; begin Btn1:=1; GameMenu; end; procedure GameMenu; begin mm:=Picture.Create(640,480); mm.Load('data/images/mm.bmp'); mm.Draw(0,0); var BtnNewGame:= new ButtonABC(220, 200, 200, 50, 'Новая игра', clMoneyGreen); BtnNewGame.OnClick:=NGW; var BtnContinium:= new ButtonABC(220, 260, 200, 50, 'Продолжить', clMoneyGreen); var BtnSetting:= new ButtonABC(220, 320, 200, 50, 'Настройки', clMoneyGreen); var BtnExit:= new ButtonABC(220, 380, 200, 50, 'Выход', clMoneyGreen); if Btn1=1 then begin BtnNewGame.Visible:=false; BtnContinium.Visible:=false; BtnSetting.Visible:=false; BtnExit.Visible:=False; NGWS; end; end; begin init; GameMenu end.
0
|
29.06.2015, 18:16 | |
Ответы с готовыми решениями:
10
Как убирать текст в модулях GraphABC, ABCButtons? Graphabc. Очистка окна Убрать AlwaysOnTop у окна GraphABC Проверка размера окна в GraphABC |
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
29.06.2015, 18:33 | 2 |
Без файла data/images/mm.bmp программу не запустить и нельзя посмотреть и поправить.
0
|
0 / 0 / 0
Регистрация: 29.06.2015
Сообщений: 12
|
|
29.06.2015, 18:50 [ТС] | 3 |
без файла
Код
uses ABCButtons, GraphABC, ABCObjects; var GN: string; w,h,btn1: integer; ifs: boolean; NewGW: RectangleABC; procedure init; begin GN:='Space Program'; w:=640; h:=480; ifs:=true; SetWindowCaption (GN); SetWindowSize(w,h); CenterWindow; SetWindowIsFixedSize(ifs); end; procedure NGWS; begin NewGW:=new RectangleABC(100,100,440,200); NewGW.Text:='ВНИМАНИЕ!'; var BtnNext:= new ButtonABC(120,250,150,40,'Продолжить',clMoneyGreen); var BtnBack:= new ButtonABC(370,250,150,40,'Назад',clMoneyGreen); end; procedure GameMenu; forward; procedure NGW; begin Btn1:=1; GameMenu; end; procedure GameMenu; begin var BtnNewGame:= new ButtonABC(220, 200, 200, 50, 'Новая игра', clMoneyGreen); BtnNewGame.OnClick:=NGW; var BtnContinium:= new ButtonABC(220, 260, 200, 50, 'Продолжить', clMoneyGreen); var BtnSetting:= new ButtonABC(220, 320, 200, 50, 'Настройки', clMoneyGreen); var BtnExit:= new ButtonABC(220, 380, 200, 50, 'Выход', clMoneyGreen); if Btn1=1 then begin BtnNewGame.Visible:=false; BtnContinium.Visible:=false; BtnSetting.Visible:=false; BtnExit.Visible:=False; NGWS; end; end; begin init; GameMenu end.
0
|
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
||||||
29.06.2015, 19:02 | 4 | |||||
А если например так.
1
|
0 / 0 / 0
Регистрация: 29.06.2015
Сообщений: 12
|
|
29.06.2015, 19:09 [ТС] | 5 |
ладно, раз уж проблема обычным способом не решается, буду так выкручиваться. Всё равно игра для себя
0
|
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
29.06.2015, 19:10 | 6 |
А Вы хотите вообще убирать ненужные кнопки?
0
|
0 / 0 / 0
Регистрация: 29.06.2015
Сообщений: 12
|
|
29.06.2015, 19:26 [ТС] | 7 |
было бы неплохо, но дестой у меня тоже не работает
0
|
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
||||||
29.06.2015, 19:33 | 8 | |||||
Убрать так
1
|
0 / 0 / 0
Регистрация: 29.06.2015
Сообщений: 12
|
|
29.06.2015, 19:49 [ТС] | 9 |
тогда попробую скачать версию поновее.
0
|
20 / 20 / 16
Регистрация: 21.01.2015
Сообщений: 51
|
|
29.06.2015, 20:40 | 10 |
Кнопки не будут удаляться.
Поверх существующих четырех кнопок, которые уже созданы, ты создаешь ещё четверку таких же кнопок, а потом сразу же их удаляешь. Добавлено через 4 минуты Почему бы кнопки не вынести в глобальные переменные?
1
|
12 / 12 / 10
Регистрация: 24.06.2015
Сообщений: 83
|
||||||||||||||||
30.06.2015, 10:21 | 11 | |||||||||||||||
Сообщение было отмечено Masterildar как решение
Решение
У Вас проблема в том, что при вызове GameMenu у вас создаются локальные кнопки. После выполнения GameMenu, наверное, Вы теряете к ним доступ и Вы никак уже не можете получить доступ к ним из кода. При срабатывании OnClick Вы создаёте новые кнопки и тут же их скрываете.
Вам нужно: 1. Сделать кнопки глобальными 2. Не создавать их заново, а только один раз при создании меню. Варианты: 1. Разнести обработку кнопок и их создание в разные процедуры (сделать их глобальными в любом случае). 2. Сделать защиту от повторного создания кнопок (проверять перед созданием, что они не существуют). Код: 1. В раздел глобальных переменных добавить:
Puporev, кстати, вопрос: в PascalABC.Net есть сборщик мусора. Если присвоить BtnNewGame:= nil; сборщик мусора его удалит. Если вызвать Destroy мы также его удалим (принудительно из кода). Какой способ лучше? Какой больше удаляет? Что интересно, при присваивании nil объект и все его свойства пропадают. Но он не пропадает с экрана (т.к. уже отрисован). А при Destroy все свойства остаются, но с экрана кнопка пропадает. Добавлено через 17 минут А почему бы Вам в самой процедуре NGW не написать?
1
|
30.06.2015, 10:21 | |
30.06.2015, 10:21 | |
Помогаю со студенческими работами здесь
11
Переполнение окна вывода graphABC Два окна uses crt и graphABC Каков начальный размер окна GraphABC? Как совместить окна CRT и GraphABC? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |