![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
-Dimon-FX- |
![]()
Сообщение
#1
|
Гость ![]() |
Помогите пожалуйста с Turbo Vision! Мне нужно сделать информационно-справочную систему... да не важно... В общем процедура Open не работает! Можете посмотреть, пожалуйста, в чем проблема?
Program name;
uses crt,app,objects,menus,drivers,views,StdDlg,DOS;
const cmwork=203;
cmdos=204;
wincoml:tcommandset=[cmsave,cmwork];
type tnotebook=object(tapplication)
Procedure initmenubar;
virtual;
Procedure initstatusline;
virtual;
Procedure HandleEvent(var Event:TEvent);
virtual;
Procedure initstatussline;
virtual;
end;
Procedure tnotebook.initmenubar;
var r:trect;
begin
getextent(r);
r.b.y:=succ(r.a.y);
menubar:=new(pmenubar,
init(r,
newmenu(
newsubmenu('~F~/ File',hcnocontext,
newmenu(
newitem('~1~/ Open','F3',kbF3,cmOpen,hcnocontext,
newitem('~2~/ Close','F2',kbF2,cmsave,hcnocontext,
newitem('~3~/ Change disk','',0,cmchangedir,hcnocontext,
newline(
newitem('~4~/ Shell DOS','',0,cmdosshell,hcnocontext,
newitem('~5~/ Exit','Alt-X',kbAltX,cmquit,hcnocontext,
nil))))))),
newitem('~W~/ Work','',kbF4,cmWork,hcnocontext,nil)))))
end;
Procedure tnotebook.initstatusline;
var r:trect;
begin
getextent(r);
r.a.y:=pred(r.b.y);
statusline:=new(pstatusline,
init(r,
newstatusdef(0,$FFFF,
newstatuskey('~Alt-X~ Exit',kbAltX,cmQuit,
newstatuskey('~F2~ Close',kbF2,cmSave,
newstatuskey('~F3~ Open',kbF3,cmOpen,
newstatuskey('~F4~ Work',kbF4,cmWork,
newstatuskey('~F10~ Menu',kbF10,cmMenu,nil))))),nil)));
disablecommands(wincoml);
end;
Procedure tnotebook.initstatussline;
var r:trect;
begin
getextent(r);
r.a.y:=pred(r.b.y);
statusline:=new(pstatusline,
init(r,
newstatusdef(0,$FFFF,
newstatuskey('~Alt-X~ Exit',kbaltx,cmquit,
newstatuskey('~F10~ Close',kbf10,cmclose,nil)),nil)));
end;
Procedure FileOpen;
var PF:PFileDialog;
Control:Word;
s:PathStr;
begin
New(PF,Init('*.dat','Vuberute nuzhnuy file:','Imya fayla',fdOpenButton,0));
Control:=DeskTop.ExecView(PF);
case Control of
StdDlg.cmFileOpen,cmOk:
begin
PF.QetFileName(s);
end;
end;
Dispose(PF,Done)
end;
end;
Procedure FileSave;
begin
end;
Procedure ChangeDir;
begin
end;
Procedure DOSCall;
begin
end;
Procedure Work;
begin
end;
Procedure TNotebook.HandleEvent(var Event:TEvent);
begin
Inherited HandleEvent(event);
if Event.What=evCommand then
case Event.Command of
cmOpen:FileOpen;
cmSave:FileSave;
cmChangeDir:ChangeDir;
cmDOSShell:DOSCall;
cmWork:Work
else exit;
end;
ClearEvent(Event);
end;
{-------------------------------------------------------------------------}
var notebook:tnotebook;
begin
clrscr;
notebook.init;
notebook.run;
notebook.done;
end.
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата В общем процедура Open не работает! А должна? У тебя тут есть несколько недочетов:1. Если ты работаешь с TVision, то про модуль CRT можешь забыть, он тебе не нужен... Убери его описание из Uses, и clrscr тоже убери... То же самое касается и модуля DOS... 2. Забыл добавить в uses менеждер памяти TVision: модуль Memory, добавь обязательно... 3. Ну, и наконец: Type
TNoteBook = Object(TApplication)
Constructor Init; { <--- Добавляешь }
...
Procedure FileOpen; { <--- Добавляешь, это должно быть методом }
End;
{ Определяешь конструктор }
Constructor TNoteBook.Init;
Begin
MaxHeapSize := 8192;
EditorDialog := StdEditorDialog;
Inherited Init;
End;
{ И переписываешь метод FileOpen }
Procedure TNotebook.FileOpen;
Var
R: TRect;
FileDialog: PFileDialog;
TheFile: FNameStr;
Const
FDOptions: Word = fdOKButton or fdOpenButton;
Begin
TheFile := '*.DAT';
New(FileDialog, Init(TheFile, 'Vuberute nuzhnuy file:', 'Imya fayla', FDOptions, 1));
If ExecuteDialog(FileDialog, @TheFile) <> cmCancel Then Begin
R.Assign(0, 0, 75, 20);
InsertWindow(New(PEditWindow, Init(R, TheFile, wnNoNumber)));
End;
End;
Это откроет тебе твой DAT-файл как обычный текстовый... Больше ничем помочь не могу, потому что структуры файла я не знаю... |
Dimon |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Реальное имя: Dimon Репутация: ![]() ![]() ![]() |
OK! Спасибо!
|
Dimon |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Реальное имя: Dimon Репутация: ![]() ![]() ![]() |
Вот, дописал, а оно мне пишет: EditorDialog Unknown Identifier
![]()
type tnotebook=object(tapplication)
constructor init;
Procedure initmenubar;
virtual;
Procedure initstatusline;
virtual;
Procedure HandleEvent(var Event:TEvent);
virtual;
Procedure initstatussline;
virtual;
Procedure FileOpen;
end;
Constructor TNoteBook.Init;
Begin
MaxHeapSize:=8192;
EditorDialog:=StdEditorDialog;
Inherited Init;
end;
Procedure TNotebook.FileOpen;
var R:Trect;
FileDialog:PFileDialog;
TheFile:FNameStr;
const FDOptions:Word=fdOKButton or fdOpenButton;
begin
TheFile:='*.DAT';
New(FileDialog,Init(TheFile,'Vuberute nuzhnuy file:','Imya fayla',FDOptions,1));
If ExecuteDialog(FileDialog,@TheFile)<>cmCancel then
begin R.Assign(0,0,75,20);
InsertWindow(New(PEditWindow, Init(R,TheFile,wnNoNumber)));
end;
end;
Procedure FileSave;
begin
end;
Procedure ChangeDir;
begin
end;
Procedure DOSCall;
begin
end;
Procedure Work;
begin
end;
Procedure TNotebook.HandleEvent(var Event:TEvent);
begin
Inherited HandleEvent(event);
if Event.What=evCommand then
case Event.Command of
cmOpen:FileOpen;
cmSave:FileSave;
cmChangeDir:ChangeDir;
cmDOSShell:DOSCall;
cmWork:Work
else exit;
end;
ClearEvent(Event);
end;
{-------------------------------------------------------------------------}
var notebook:tnotebook;
begin
notebook.init;
notebook.run;
notebook.done;
end.
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Uses должен выглядеть вот так:
uses
app, objects, menus, drivers, views, editors, StdDlg, memory;
Ты наверняка не включил Editors... |
Dimon |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Реальное имя: Dimon Репутация: ![]() ![]() ![]() |
Да! Теперь работает. Спасибо!
|
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 9:32 |