Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объекты в паскале. Глубже! нужно такое: абв.где.ёжз 
V
    Опции темы
sh_iv
Дата 10.4.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.3.2007

Репутация: нет
Всего: нет



Сделал такой модуль:
Код

uses crt;

type
    TMenu = object
          X,Y: integer;
          Color: word;
          Name: string;
          Deystvie: string;
          MType: char;
          Nomber: integer;
          Constructor Init (aX,aY: integer; aColor: word);
          Procedure AddPunct (aName: string; aDeystvie: string);
          Procedure ViewPunct(aNomber: integer);
          Procedure ViewAll(aMType: char);
          Procedure ViewPunctAction(aNomber: integer);
    end;

    PtrRec = ^Rec;
    Rec = record
        Element : string;    {поле данных}
        pNext : PtrRec;    {прямой указатель}
        pPrev : PtrRec;    {обратный указатель}
      End;

    PtrRecD = ^RecD;
    RecD = record
        Deystv : string;    {поле данных}
        pNextD : PtrRecD;    {прямой указатель}
        pPrevD : PtrRecD;    {обратный указатель}
      End;

var pBegin,pEnd : PtrRec;
    pBeginD,pEndD : PtrRecD;
    x,y:integer;

Implementation

Constructor TMenu.Init;

begin
x:=aX;
y:=aY;
TextColor(aColor);

New (pBegin);
pBegin^.pNext := Nil;
pBegin^.pPrev := Nil;
pEnd := pBegin;

New (pBeginD);
pBeginD^.pNextD := Nil;
pBeginD^.pPrevD := Nil;
pEndD := pBeginD;

end;


Procedure TMenu.AddPunct;

begin

New (pEnd^.pNext);
pEnd^.pNext^.pPrev := pEnd;
pEnd := pEnd^.pNext;
pEnd^.pNext := Nil;
pEnd^.Element := aName;

New (pEndD^.pNextD);
pEndD^.pNextD^.pPrevD := pEndD;
pEndD := pEndD^.pNextD;
pEndD^.pNextD := Nil;
pEndD^.Deystv := aDeystvie;

end;

Procedure TMenu.ViewPunct;
var pAux : PtrRec;
    i:integer;
begin
 i:=0;

 if aNomber = 0 then Write ('0 is a wrong nomber. [1..n] expected');


 if aNomber = 1 then
    begin
         pAux := pBegin^.pNext;
         Write (pAux^.Element:10);
    end
  else
      begin
      pAux := pBegin^.pNext;
      for i:=1 to aNomber-1 do
          begin
               pAux := pAux^.pNext;
               if pAux = Nil then
                  begin
                       writeln('ERROR: Nomber is too large');
                       i:=0;
                       break;
                  end;
          end;
      if i <> 0 then Write (pAux^.Element:10);
      end;

 readln;
end;

Procedure TMenu.ViewPunctAction;
var pAuxD : PtrRecD;
    i:integer;
begin
 i:=0;

 if aNomber = 0 then Write ('0 is a wrong nomber. [1..n] expected');


 if aNomber = 1 then
    begin
         pAuxD := pBeginD^.pNextD;
         Write (pAuxD^.Deystv:10);
    end
  else
      begin
      pAuxD := pBeginD^.pNextD;
      for i:=1 to aNomber-1 do
          begin
               pAuxD := pAuxD^.pNextD;
               if pAuxD = Nil then
                  begin
                       writeln('ERROR: Nomber is too large');
                       i:=0;
                       break;
                  end;
          end;
      if i <> 0 then Write (pAuxD^.Deystv:10);
      end;

 readln;
end;

Procedure TMenu.ViewAll;
var pAux : PtrRec;
    i:integer;

begin
 i:=0;
 gotoxy(x,y);
 pAux := pBegin^.pNext;
 Write (pAux^.Element:10);
 pAux := pAux^.pNext;
 While pAux <> Nil do
     Begin
        if aMType = '1' then
           begin
                i:=i+1;
                gotoxy(x,y+i);
           end;
        Write (pAux^.Element:10);
        pAux := pAux^.pNext;
     End;

 readln;
end;

end.


Вместо ViewAll(aMType: char); нужна конструкция ViewAll.Horizontal; или ViewAll.Vertical;

Ребят, подскажите как...
PM MAIL   Вверх
ama_kid
Дата 10.4.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Цитата
Вместо ViewAll(aMType: char); нужна конструкция ViewAll.Horizontal; или ViewAll.Vertical;
Прям напрямую через точку? Имхо, так нельзя - синтаксис не позволит...
Выхода я вижу два:
1) Ввести в объект приватный член TypeOfView:TTypeOfView = (tovHorizontal, tovVertical). Ввести метод SetViewType(Type:TTypeOfView), который будет устанавливать текущий режим просмотра. Ну и сначала вызывать этот метод , а затем просто вызывать ViewAll без параметров, а внутри этой функции проверять значение данного приватного параметра и выводить в соответствии с ним. На мой взгляд это самое правильное, но кому как... smile 
2) Реализовать в объекте две дополнительные функции ViewAsHorizontal и ViewAsVertical, которые будут обращаться к функции ViewAll с соответствующим параметром. Тогда вызов будет MyMenu.ViewAsHorizontal и MyMenu.ViewAsVertical

P.S. Ну и никто не мешает совместить эти два способа... smile 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
sh_iv
Дата 11.4.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.3.2007

Репутация: нет
Всего: нет



Забыл еще написать, что эти две функции (вывода горизонтального и вертикального меню) нужно в отдельный модуль запихнуть...
PM MAIL   Вверх
sh_iv
Дата 12.4.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.3.2007

Репутация: нет
Всего: нет



решил. Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0794 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.