Помощь - Поиск - Пользователи - Календарь
Полная версия: Turbo Vision
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Dimon-FX-
Помогите пожалуйста с 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
Цитата
В общем процедура 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
OK! Спасибо!
Dimon
Вот, дописал, а оно мне пишет: 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
Uses должен выглядеть вот так:
uses
  app, objects, menus, drivers, views, editors, StdDlg, memory;


Ты наверняка не включил Editors...
Dimon
Да! Теперь работает. Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.