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


Автор: WolfON 16.6.2005, 17:30
Есть такой немалоизвестный компонент для Turbo Pascal, называется Turbo Vision.
Так вот, менюхи он хранит в файле .MNU, кто знает как гео редактировать вручную или программно?

Автор: Akina 16.6.2005, 18:06
Там есть тулза для визуального их создания и редактирования. Но можно и руками.

Автор: WolfON 16.6.2005, 18:26
Это хорошо, что она есть, но нельзя было-бы на нее ссылку дать?

И если руками, то как?

Автор: TP@MB@Y 17.6.2005, 19:49
WolfON
руками руками smile

Поищи хелп.

Вот например как создается нижний меню-бар:
Код

procedure TMyApp.InitMenuBar;
var R: TRect;
begin
  GetExtent(R);
  R.B.Y := R.A.Y + 1;
  MenuBar := New(PMenuBar, Init(R, NewMenu(
    NewSubMenu('~F~ile', hcNoContext, NewMenu(
      NewItem('~O~pen', 'F3', kbF3, cmFileOpen, hcNoContext,
      NewItem('~N~ew', 'F4', kbF4, cmNewWin, hcNoContext,
      NewLine(
      NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext,
      nil))))),
    NewSubMenu('~W~indow', hcNoContext, NewMenu(
      NewItem('~N~ext', 'F6', kbF6, cmNext, hcNoContext,
      NewItem('~Z~oom', 'F5', kbF5, cmZoom, hcNoContext,
      NewItem('~D~ialog', 'F2', kbF2, cmNewDialog, hcNoContext,
      nil)))),
    nil))
  )));
end;

Автор: WolfON 18.6.2005, 15:27
TP@MB@Y
Как создается - я знаю.
Но в .mnu файле такая белиберда, точнее я там могу поменять простейшие параметры, вроде адреса процедуры, кол-ва симаволов в назавнии или само название, но что-нибудь удалить не получается.

Автор: Гость_Van 13.8.2005, 08:03
Помогите пожалуйста с программой. Она зависает при запуски, и воводит сообщ:
прогр. виполнила недопустимую операцию...

Место ошибки 0D70:0010
Прерывания : Нет

program ViewText;
uses App, Objects, Drivers, Menus, Views;

var
lines:PCollection;

type
TMyApp = object(TApplication)
procedure Run;Virtual;
end;

type
PInterior = ^TInterior;
TInterior = object(TScroller)
constructor Init(var R:TRect; SX, SY:PScrollBar);
procedure Draw;Virtual;
end;


procedure TMyApp.Run;
var
R:Trect;
W:Pwindow;
s, name:string;
f:text;
begin
name := copy(ParamStr(0),1,pos('.',paramStr(0)))+'PAS';
Lines := new(PCollection, Init(10, 5));
assign(f, name);
{$I-}
reset(f);
{$I+}
if ioResult = 0 then begin
with lines^ do while not EOF(f) do
begin
readln(f, s);
Insert(newStr(s))
end;
close(f)
end
else
Lines^.Insert(newStr('?Ґв ¤®бвгЇ  Є д ©«г '+name));
DeskTop^.GetExtent®;
w := new(PWindow,Init(R,'?а®б¬®ва д ©« '+Name, 0));
with W^ do
begin
GetClipRect®;
R.Grow(-1, -1);
Insert(new(PInterior, Init(R, standardScrollBar(sbHorizontal+
sbHandleKeyBoard), StandardScrollBar(sbVertical + sbHandleKeyBoard))));
end;
DeskTop^.Insert(W);
inherited Run;
end;

constructor TInterior.Init;
begin
inherited init(R, SX, SY);
growMode := gfGrowHiX + gfGrowHiY;
setLimit(128, Lines^.count-1);
end;

procedure TInterior.Draw;
var
Y:integer;
B:TDrawBuffer;
S:string;
begin
for Y := 0 to pred(size.Y) do
begin
MoveChar(B, ' ',GetColor(1), size.X);
if (Y + Delta.Y < lines^.Count) and (lines^.At(Y+Delta.Y) = nil) then
begin
s := PString(lines^.At(Y+Delta.Y))^;
MoveStr(B,copy(s, Delta.X+1, length(s)-Delta.X), getColor(1));
end;
writeLine(0, Y, size.X, 1, B);
end;
end;

var
p:TMyApp;
begin
p.run;
p.init;
p.done;
end.








Автор: volvo877 13.8.2005, 12:58
Гость_Van
Может все-таки, сначала инициализировать, а потом-запускать?
Код
var
  p:TMyApp;
begin
  p.init; { !!! Сначала - Init !!!}
  p.run;
  p.done;
end.

Автор: Гость_Van 13.8.2005, 13:35
спасибо!!! за ответ, большое!!

Автор: Fedor 14.8.2005, 10:50
Модератор: Один топик - один вопрос. Тема закрыта

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