![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
тишина |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
помогите описать динамическое создание меню, кнопки, панели получаются, меню так же прописываю, а оно не отображается, вот кусок из процедуры FormCreat:
Код procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin kol:=15; Caption:='Игра'; Color:=$00FC1B01; BorderStyle:=bsSingle; ClientWidth := CW*((kol div 4)+1); ClientHeight := CH*8; Menu:=MainMenu1; MainMenu1:=TMainMenu.Create(Form1); with MainMenu1 do begin Left:= 10; \\вот это вроде в свойствах меню нет, но надо же как-то Top:= 10; \\ задавать, где оно должно находиться :huh: Parent:=Form1; ParentBiDiMode:=True; Exit:=TMenuItem.Create(Form1.MainMenu1); with Exit do begin OnClick:=FormExit; Caption:='Выход'; end; Spravka:=TMenuItem.Create(Form1.MainMenu1.Items); with Spravka do begin Caption:='Справка'; About:=TMenuItem.Create(Spravka); with About do begin OnClick:=PrgAbout; Caption:='О программе'; end; Rules:=TMenuItem.Create(Spravka); with Rules do begin OnClick:=GameRules; Caption:='Правила'; end; end; end; Тегами для подсветки кода пользуйтесь |
![]() ![]() |
Digitalator |
![]()
Сообщение
#2
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: ![]() ![]() ![]() |
Смею пердположить что шаманить над формой в FormCreate слишком рано. может попробовать onActivate ?
-------------------- |
тишина |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
предположение неверно, моя программа отлично работает, несмотря, что все нужные элементы создаются динамически, единственная проблема-это меню, мой препод сам ничё толком объяснить не может и если с другими элементами я легко разобралась, то с меню какая-то заморочка, это последний шаг к моей пятерке по экзамену! ОБЪЯСНИТЕ, ЧТО ДЕЛАТЬ С МЕНЮ!!!
|
Digitalator |
![]()
Сообщение
#4
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата вот это вроде в свойствах меню нет, но надо же как-то Top:= 10; \\ задавать, где оно должно находиться ![]() а вот чего там нет - того нет. Насколько помню меню автоматически ставиться в верх формы, и не надо ничего там устанавливать. и потом Цитата MainMenu1:=TMainMenu.Create(Form1); Если объект меню уже выставлен на форму (с помощью визуального редактора), то он уже создан, зачем это делать повторно? может быть это поможет разобраться Код procedure additem(owner:TMenuItem; caption:string); var item:TMenuItem; begin item := TMenuItem.Create(owner); item.Caption:=caption; owner.Add(item); end; ........ additem(MainMenu1.Items,'Menu item'); additem(MainMenu1.Items[0],'Sub item'); additem(MainMenu1.Items[0].Items[0],'Sub Sub item'); PS: А предположение действительно неверно ) Сообщение отредактировано: Digitalator - 2.05.2005 20:55 -------------------- |
тишина |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
в том-то и дело! надо обходится без визуального редактора, на этапе конструирования на форме ничего не должно находится, всё создаётся при запуске программы, с визуальным я бы уже давно всё сделала, чё там делать-то, но вот про динамическое создание нигде особо информации не найдёшь, а ваш текст, пожалуйста, с комментариями
|
Digitalator |
![]()
Сообщение
#6
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата в том-то и дело! надо обходится без визуального редактора Это препод так сказал?? что за бред, делфи для того и делали чтоб быстро и удобно было....... Вот код рабочего модуля с динамически созданным меню, все должно быть понятно Код unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure additem(owner:TMenuItem; caption:string); var item:TMenuItem; begin item := TMenuItem.Create(owner); item.Caption:=caption; owner.Add(item); end; procedure TForm1.FormCreate(Sender: TObject); begin Menu := TMainMenu.Create(Form1); additem(Menu.Items,'Menu item 1'); additem(Menu.Items,'Menu item 2'); additem(Menu.Items,'Menu item 3'); additem(Menu.Items[0],'Sub item 1-1'); additem(Menu.Items[0],'Sub item 1-2'); additem(Menu.Items[1],'Sub item 2-1'); additem(Menu.Items[2],'Sub item 3-1'); additem(Menu.Items[0].Items[0],'Sub Sub item 1'); additem(Menu.Items[0].Items[0],'Sub Sub item 2'); end; end. -------------------- |
тишина |
![]()
Сообщение
#7
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
а вот и не бред, в некоторых случаях никак нельзя обойтись без динамического создания, либо такой способ облегчает программирование, как ни странно, вот кстати в моём случае - это так, и предмет - Технология программирования, значит мы должны научиться пользоваться различными способами задания компонентов, а не только уметь картинки переставлять, вот
а ваш код работает? к сожалению сейчас проверить не могу, пора спать, но он, как мне кажется, практически дублирует, то что у меня прописано, только несколько строчек выведено в отдельную процедуру, для сравнения создания мной других элементов с созданием меню приведу полностью процедуру FormCreat: Код procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin kol:=15; Caption:='Èãðà'; Color:=$00FC1B01; BorderStyle:=bsSingle; ClientWidth := CW*((kol div 4)+1); ClientHeight := CH*8; Menu:=MainMenu1; MainMenu1:=TMainMenu.Create(Form1); with MainMenu1 do begin Left:= 10; Top:= 10; Parent:=Form1; ParentBiDiMode:=True; Exit:=TMenuItem.Create(Menu.Items); with Exit do begin OnClick:=FormExit; Caption:='Âûõîä'; end; Spravka:=TMenuItem.Create(Form1.MainMenu1.Items); with Spravka do begin Caption:='Ñïðàâêà'; About:=TMenuItem.Create(Spravka); with About do begin OnClick:=PrgAbout; Caption:='Î ïðîãðàììå'; end; Rules:=TMenuItem.Create(Spravka); with Rules do begin OnClick:=GameRules; Caption:='Ïðàâèëà'; end; end; end; v1:=TButton.Create(Form1); with v1 do begin Font.Name:='Century Gothic'; Font.Size:=9; Height:=30; Width:=75; Left:=5; Top:=CH*4+200; Caption:='15-øêè'; Parent:=Form1; OnClick:=Button2Click; end; v2:=TButton.Create(Form1); with v2 do begin Font.Name:='Century Gothic'; Font.Size:=9; Height:=30; Width:=75; Left:=85; Top:=CH*4+200; Caption:='19-øêè'; Parent:=Form1; OnClick:=Button3Click; end; v3:=TButton.Create(Form1); with v3 do begin Font.Name:='Century Gothic'; Font.Size:=9; Height:=30; Width:=75; Left:=165; Top:=CH*4+200; Caption:='24-øêè'; Parent:=Form1; OnClick:=Button4Click; end; ng:=TButton.Create(Form1); with ng do begin Font.Name:='Century Gothic'; Font.Size:=12; Height:=30; Width:=235; Caption:='Íîâàÿ èãðà'; Left:=5; Top:=CH*4+160; Parent:=Form1; OnClick:=Button1Click; end; kol:=15; For i:=1 to kol do begin pole[i]:=TButton.Create(Form1); with pole[i] do begin if i<=(kol div (4+n))+1 then begin Left:=(i-1)*CW; Top:=CH*0+CH; end else begin if i<=(kol div (4+n))*2+2 then begin Left:=(i-((kol div (4+n))+2))*CW; Top:=CH+CH; end else begin if i<=(kol div (4+n))*3+3 then begin Left:=(i-((kol div (4+n))*2+3))*CW; Top:=CH*2+CH; end else begin if i<=(kol div (4+n))*4+3+n then begin Left:=(i-((kol div (4+n))*3+4))*CW; Top:=CH*3+CH; end else begin if i<=(kol div (4+n))*5+4 then begin Left:=(i-((kol div (4+n))*4+3+n+n))*CW; Top:=CH*4+CH; end; end; end; end; end; Font.Name:='Century Gothic'; Font.Size:=9; Cursor:=crDrag; Caption:=IntToStr(i); Width:=CW; Height:=CH; Parent:=Form1; OnDragDrop:=FormDragDrop; DragMode:=dmAutomatic; end; end; end; напомню, что все кнопки работают, и располагаются на своих местах, потому я и теряюсь в догадках, что же происходит с меню, я предполагаю, что я неправильно прописываю именно элементы Items может там программные скобки где-то должны быть или наоборот - их не должно быть, или обычные (), или что-то ещё, о чём я не догадываюсь ![]() спасибо, за то что стараетесь, но пока по-моему продвижений нет ![]() |
тишина |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
на переменную Kol:=15 не обращайте внимания, это не константа, она на своём месте, и служит исправно, только я её зачем-то повторила перед созданием массива кнопок, забылась
![]() |
Digitalator |
![]()
Сообщение
#9
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата спасибо, за то что стараетесь, но пока по-моему продвижений нет я вам дал полностью работающий в Delphi 7 код. Разбираться в вашем не хочу да и не вижу смысла - там так напутано с With что черт ногу сломит. и еще ра говорю - если полей Left и Top в классе TMainMenu нет, то и нечего их прописывать. Цитата а вот и не бред, в некоторых случаях никак нельзя обойтись без динамического создания В данном случае можно, и нужно - поэтому бред. Нельзя учиться програмировать на надуманных ситуациях. Все нужно использовать тогда когда это нужно, а не когда препод задал. ИМХО. [ CLOSE TOPIC ] :nnn: -------------------- |
тишина |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
во-первых делать не то,что задаёт препод, это умысленно терять шанс нам получение диплома, во-вторых ситуация в данном случае не надуманная, вы видели только одна процедуру, представления не имеете, что за программа и берётесь утверждать, что динамическое создание здесь лишнее, излишнее самомнение иногда вредит в жизни
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Так, давайте-ка разборки в тематических разделах прекращать...
тишина, к Вам это относится в первую очередь ! |
тишина |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 3.05.05 17:11) Так, давайте-ка разборки в тематических разделах прекращать... тишина, к Вам это относится в первую очередь ! ну вот, а я-то при чём? он первый начал упорно твердить, что, мол, бред и всё такое, модными словами кидаться, спасибо ему, конечно ему за помощь, но достаточно было сказать, что мне не хватает вот такой строчки Menu.Items.Add(Exit); а не разводить баталию, так что это не у меня проблемы в общении Флейм удален. Закрыто... |
![]() ![]() |
![]() |
Текстовая версия | 9.07.2025 18:48 |