Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Turbo Vision

Автор: -Dimon-FX- 14.04.2007 15:31

Помогите пожалуйста с 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.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.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.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 14.04.2007 16:12

Цитата
В общем процедура 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 14.04.2007 16:17

OK! Спасибо!

Автор: Dimon 14.04.2007 16:43

Вот, дописал, а оно мне пишет: EditorDialog Unknown Identifier blink.gif


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 14.04.2007 17:00

Uses должен выглядеть вот так:

uses
app, objects, menus, drivers, views, editors, StdDlg, memory;


Ты наверняка не включил Editors...

Автор: Dimon 14.04.2007 17:24

Да! Теперь работает. Спасибо!