Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Создание контекстного меню


Автор: nero_schwarz 25.11.2004, 22:24
Кто-нибудь выложите пример создания контекстного меню в Pascal! На первом курсе делал- уже не помню. Не хотелось бы снова Обьектно Ореентированное Программирование перерывать. По примеру легче! Или ссылку, если моно.

Автор: SPrograMMer 26.11.2004, 13:00
А зачем ООП прерывать, пиши ОО контекстное меню.
Кстати в Pascal, если есть поддержка библиотеки Turbo Vision, то моно очень просто меню создать. Счас постораюсь ченить поконкретнее тебе отыскать....

Автор: nero_schwarz 27.11.2004, 17:39
SPrograMMer, спасибо. Тurbo Visio мы вообще в политехе не проходили, но я уже пробовал работать с ним, так что если что найдешь я буду рад! И сам поищу что - нибудь.

Автор: nero_schwarz 27.11.2004, 19:25
SPrograMMer, во нашел ссылку: http://www.citforum.ru/programming/tv_doc/tvdoc_01.shtml.
Но мне нужен простой пример- ОО контекстного меню. Если есть - выложи пожалуйста.

Автор: nero_schwarz 27.11.2004, 21:40
Уже с самого начала проблемы!!!
Написал следующую прогу:
uses app, Menus, Objects, Drivers;
type
TMyApp=object(TApplication)
procedure InitStatusLine;
virtual;
end;
procedure TMyApp.InitStatusLine;
var
r: TRect;
begin
GetExtent®;
R.A.Y:=R.B.Y-1;
StatusLine := New(PStatusLine, Init(r,
NewStatusDef(0, $ffff,
NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit, {Oшибка!!!!}
NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose, {Ошибка!!!!}
nil)),
nil)
));
end;
var
MyApp: TmyApp;

begin
MyApp.Init;
MyApp.Run;
MyApp.Done;
end.
Все правильно, но выдается ошибка: неизвестная ...(unknown identifier) на константах cmQuit и cmClose. В чем проблема?

Автор: nero_schwarz 27.11.2004, 22:31
Решил проблему написав вместо cmQuit - 1(работает!). Прошу помочь в поиске соответствий между стандартными константами и числами(нашел только: cmQuit=1, cmZoom=5).

Автор: Zero 27.11.2004, 22:35
Какая же она не известная, ты значит идентификаторы cmQuit и cmClose не указал, т.е. в разделе указания типов (или в др. месте) не выделил для них память.

Автор: nero_schwarz 27.11.2004, 23:21
Zero, как это сделать скажи!

Автор: nero_schwarz 27.11.2004, 23:39
этих индентификаторов у меня даже в хелпе нет! как и hcNoContext! есть только cmNew, cmOpen и несколько других, с числовыми соответствиями.

Автор: Zero 28.11.2004, 00:18
Цитата(nero_schwarz @ 27.11.2004, 23:39)
этих индентификаторов у меня даже в хелпе нет! как и hcNoContext! есть только cmNew, cmOpen и несколько других, с числовыми соответствиями
Конечно нет, в хелпе пишут только информацию о функциях, процедурах, типах (в частносте которые определяют идентификаторы) и т.д.
Цитата(nero_schwarz @ 27.11.2004, 23:21)
Zero, как это сделать скажи
Если ты имеешь ввиду как выделить память для идентификатора, то это делаестя либо в разделе констант
Код

Const
 cmQuit=<какое-нибудь значение любого типа (но который связан с тем что хочеш делать>;
...
Либо в разделе переменных
Код

Var
 <идентификатор>:<тип>;
...

Либо динамически во время выполнения программы, но если ты ещё незнаеш предыдущих двух способов, то этим я тебе даже голову забивать не буду.

Автор: nero_schwarz 28.11.2004, 14:11
Цитата
cmQuit=<какое-нибудь значение любого типа (но который связан с тем что хочеш делать>;

да знаю я это! но ты можешь мне эти значения сказать? для cmQuit я нашел, оно =1. Я же не могу просто с неба эти значения брать!

Автор: Zero 28.11.2004, 17:04
nero_schwarz, чем должны отличатся команды, Exit и Close??? Если это обе выход то зачем тебе 2 штуки? Если эти обе команды выхода, но хочеш сделать их на разные кнопки, то можеш сделать также
Код

Const
 cmQuit=1;
 cmClose=1;
...
Правда это всё тупо, ну и код у тебя тупой, и ещё написал ты его с ошибкой, т.е. чтобы получить координаты всего экрана, надо писать так
Код

GetExtent (R)
а ты там написал какуюто-закарючку... smile
Но если ты всётаки не понял про-что я те талкую, то вот тебе ещё одна http://pascal.dax.ru/files/books/TurboPascal/gl15/gl15_2.html, там вроде идёт базар про твой вопрос...

Автор: nero_schwarz 28.11.2004, 17:21
Zero, ну ты дал! ты вообще понятие имеешь, про что говоришь? cmClose - команда закрытия активного окна, cmQuit - выход из программы. и написал я все нормально- просто при копировании текста лажа вышла!
Добавлено @ 17:29
Zero, насчет ссылки- я уже штук 20 сайтов на эту тему нашел, и похоже они все друг у друга слово в слово списывали. и ничего по существу. Ну не работает у меня прога, если я cmClose, cmQuit или hcNoContext пишу! Мне нужно числовое значение этих идентификаторов!
Некоторые описаны в Хелпе, для cmQuit и cmZoom я в инете нашел, ну и остальные должны же быть где-то!

Автор: nero_schwarz 28.11.2004, 20:51
ну кто-нибудь, загляните в учебник Фаронова. там наверняка есть! в приложениях где-нибудь...

Автор: Zero 28.11.2004, 22:06
У меня, есть его учебник, и он написан на тему "Delphi 6". Хотя может быть есть и с пакалем. Но помоему тебе надо лучше смотреть что написано на тех 20 сайтах которые ты нашёл, врядли они станут друг у друга всё переписывать если как ты говоришь у всех всё не правильно...

Автор: Guest 28.11.2004, 22:18
Zero, да я не говорю, что у них не правильно! может и меня оболочка ТП 7.0 глюченная, но и в борланде та же фигня! У них нет того, что мне надо- соответствия между идентификаторами и числом! Если я пишу вместо cmQuit единицу, то все работает. И я думаю что в случае других идентификаторов так же будет работать. Но нет информации на этот счет!

Автор: nero_schwarz 28.11.2004, 22:43
во нашел(хотя можно было и самому догадаться!) hcNoContext=0; но что же мне делать с другими идентификаторами? и почему у меня не работает все по-нормальному, как у всех...

Вот еще:
hcBenchmarks = 108;
hcConfig = 114;
hcConfigBench = 115;
hcConfigGlobal = 117;
hcConfigRPM = 116;
hcDisk = 104;
hcDiskSelect = 105;
hcDiskSelectList = 106;
hcDiskSelectManual = 107;
hcFile = 100;
hcFileDOSShell = 102;
hcFileExit = 103;
hcFileSave = 101;
hcGraphs = 109;
hcGraphsCache = 113;
hcGraphsRead = 110;
hcGraphsVerify = 112;
hcGraphsWrite = 111;
hcMainIndex = 7;
hcMsgBoxExit = 500;
hcMsgBoxMultitask = 501;
hcNoContext = 0;


Автор: Zero 28.11.2004, 23:10
Цитата(Guest @ 28.11.2004, 22:18)
Но нет информации на этот счет!
У меня, тоже нет информации на тот счёт.
Цитата(nero_schwarz @ 28.11.2004, 22:43)
во нашел(хотя можно было и самому догадаться!) hcNoContext=0; но что же мне делать с другими идентификаторами? и почему у меня не работает все по-нормальному, как у всех...
И что интересно ты полезного нашёл, чему же ты приравнял cmClose ─ твою комманду закрытия активного окна? Я это спрашиваю потому что мне самому стало интересно, давно у меня уже небыло случая когда уменя возникают вопросы по паскалю. smile И ещё какие у тебя остались идентификаторы, и чё у тебя неработает?

Автор: nero_schwarz 29.11.2004, 19:59
Всегда здал, что всё гениальное просто. Но хорошая мысля приходит опосля(что тоже верно).
Так вот зачем где-то искать, если у тебя всё под рукой:
Заходим в поиск файла, задаём найти текст: cmQuit в папке ТП и находим список файлов, один из которых tp\doc\views.int. Пожалуйста проблема решена:

const

{ TView State masks }

sfVisible = $0001;
sfCursorVis = $0002;
sfCursorIns = $0004;
sfShadow = $0008;
sfActive = $0010;
sfSelected = $0020;
sfFocused = $0040;
sfDragging = $0080;
sfDisabled = $0100;
sfModal = $0200;
sfDefault = $0400;
sfExposed = $0800;

{ TView Option masks }

ofSelectable = $0001;
ofTopSelect = $0002;
ofFirstClick = $0004;
ofFramed = $0008;
ofPreProcess = $0010;
ofPostProcess = $0020;
ofBuffered = $0040;
ofTileable = $0080;
ofCenterX = $0100;
ofCenterY = $0200;
ofCentered = $0300;
ofValidate = $0400;
ofVersion = $3000;
ofVersion10 = $0000;
ofVersion20 = $1000;

{ TView GrowMode masks }

gfGrowLoX = $01;
gfGrowLoY = $02;
gfGrowHiX = $04;
gfGrowHiY = $08;
gfGrowAll = $0F;
gfGrowRel = $10;

{ TView DragMode masks }

dmDragMove = $01;
dmDragGrow = $02;
dmLimitLoX = $10;
dmLimitLoY = $20;
dmLimitHiX = $40;
dmLimitHiY = $80;
dmLimitAll = $F0;

{ TView Help context codes }

hcNoContext = 0;
hcDragging = 1;

{ TScrollBar part codes }

sbLeftArrow = 0;
sbRightArrow = 1;
sbPageLeft = 2;
sbPageRight = 3;
sbUpArrow = 4;
sbDownArrow = 5;
sbPageUp = 6;
sbPageDown = 7;
sbIndicator = 8;

{ TScrollBar options for TWindow.StandardScrollBar }

sbHorizontal = $0000;
sbVertical = $0001;
sbHandleKeyboard = $0002;

{ TWindow Flags masks }

wfMove = $01;
wfGrow = $02;
wfClose = $04;
wfZoom = $08;

{ TWindow number constants }

wnNoNumber = 0;

{ TWindow palette entries }

wpBlueWindow = 0;
wpCyanWindow = 1;
wpGrayWindow = 2;

{ Standard command codes }

cmValid = 0;
cmQuit = 1;
cmError = 2;
cmMenu = 3;
cmClose = 4;
cmZoom = 5;
cmResize = 6;
cmNext = 7;
cmPrev = 8;
cmHelp = 9;

{ Application command codes }

cmCut = 20;
cmCopy = 21;
cmPaste = 22;
cmUndo = 23;
cmClear = 24;
cmTile = 25;
cmCascade = 26;

{ TDialog standard commands }

cmOK = 10;
cmCancel = 11;
cmYes = 12;
cmNo = 13;
cmDefault = 14;

{ Standard messages }

cmReceivedFocus = 50;
cmReleasedFocus = 51;
cmCommandSetChanged = 52;

{ TScrollBar messages }

cmScrollBarChanged = 53;
cmScrollBarClicked = 54;

{ TWindow select messages }

cmSelectWindowNum = 55;

{ TListViewer messages }

cmListItemSelected = 56;
Спасибо всем кто мне помогал в моём поиске!
Осталось разобраться с использованием драйвера для LPT в ТП. Думаю на этот раз мне не удастся так легко отделаться...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)