IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Turbo Vision, Не работает процедура Open
сообщение
Сообщение #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.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.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #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-файл как обычный текстовый... Больше ничем помочь не могу, потому что структуры файла я не знаю...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Dimon

Репутация: -  0  +


OK! Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Dimon

Репутация: -  0  +


Вот, дописал, а оно мне пишет: 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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Uses должен выглядеть вот так:
uses
app, objects, menus, drivers, views, editors, StdDlg, memory;


Ты наверняка не включил Editors...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Dimon

Репутация: -  0  +


Да! Теперь работает. Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.11.2020 0:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name