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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать список из строк выводимых в окне CRT 
:(
    Опции темы
digitech
Дата 6.6.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я пытаюсь осуществить приметивный скроллин для просмотра длинных таблиц.
Я не знаю как заполнить двунаправленный список из строк которые выводятся в окно CRT.
Это для того, чтобы при нажатии клавиши вверх/вниз текст как бы прокручивался, а на самом деле выводилось по 25 строк от определённого элемента списка.
Код

dynstrscr = ^strscreen;
strscreen = record
    str : string[80];
    prev: dynstrscr;
    next: dynstrscr;
    end; 
var screen : dynstrscr;

Проблема ещё вот в чём:
из файла считываются данные/записи в которых несколько полей - это всё выводится в таблицу.
И я не знаю как каждую строку таблицы занести в один элемент списка, причём таких таблиц может быть несколько.
И процедуру нежелательно менять, так она используется ещё в двух других процедурах.
Код

{Это таблица в которую выводятся данные из файла, вызывается она в двух процедурах- это при поиске в одной процедуре, и во второй процедуре вывода всей БД (эта процедура ниже VeiweDataCustomer).}
Procedure CustomerTablicF;
var acc:string[3];
begin
With Customer do
begin
 if Acceleration then Acc:='да' else acc:='нет';
 Writeln(' ╔════════════════════════╤═════════════════════════════════════════════╗');
 Writeln(' ║ Ф.И.О                  │',FIO :44,' ║');
 Writeln(' ║ Адресс                 │',Adress :44,' ║');
 Writeln(' ║ Уcлуга                 │',Service :44,' ║');
 Writeln(' ║ Стоимость услуги       │',Cost :44,' ║');
 Writeln(' ║ Количество             │',Amount :44,' ║');
 Writeln(' ║ Срочность              │',Acc :44,' ║');
 Writeln(' ║ Дата заказа            │',
 IntToStr(data_start.day)+':'+IntToStr(data_start.month)+
 ':'+IntToStr(data_start.year) :44,' ║');
 Writeln(' ║ Дата окончания работ   │',
 IntToStr(data_end.day)+':'+IntToStr(data_end.month)+
 ':'+IntToStr(data_end.year) :44,' ║');
 Writeln(' ║ Итог\сумма             │',Sum :44,' ║');
 Writeln(' ╚════════════════════════╧═════════════════════════════════════════════╝');
end;
end;

Procedure VeiweDataCustomer;
begin
reset(order);
While not eof(order) do
begin
read(order, Customer);
CustomerTablicF; {вывод таблицы }
end;
close(order);
readkey;
end;

Если быть точнее, то я не знаю какой выбрать путь реализации этой задачи.
Вот что я вообще думал:
1) во время первого вывода всех тыблиц на экран связать экран с файлом AssignCRT(f); ... и потом из текстового файла было бы легче занести строки в динамический список и листать его (файл потом удалить, ну хотя можно и оставить, но не желательно);
2) С помощью ReadBuf, но это мне кажется, только усложнится из-за  кол-ва строк выведеных за раз. Ну точнее не получится.
Ну и ещё там пару вариантов я придумывал, ну там толком ничего.

Что вообще можно придумать?
PM MAIL   Вверх
volvo877
Дата 6.6.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Цитата(digitech @  6.6.2008,  12:52 Найти цитируемый пост)
Я не знаю как заполнить двунаправленный список из строк которые выводятся в окно CRT.

Вот тут посмотри: http://forum.vingrad.ru/forum/topic-214837.html
PM MAIL   Вверх
digitech
Дата 6.6.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(digitech @  6.6.2008,  12:52 Найти цитируемый пост)
1) во время первого вывода всех тыблиц на экран связать экран с файлом AssignCRT(f); ... и потом из текстового файла было бы легче занести строки в динамический список и листать его (файл потом удалить, ну хотя можно и оставить, но не желательно);

Ну там вот текстовый файл, это я сначала так хотел.
А у меня вопрос вот про что:
Цитата(digitech @  6.6.2008,  12:52 Найти цитируемый пост)
из файла считываются данные/записи в которых несколько полей - это всё выводится в таблицу.И я не знаю как каждую строку таблицы занести в один элемент списка, причём таких таблиц может быть несколько.



Из текстового файла то я могу, а вот в моей ситуации не могу сообразить.

Добавлено через 2 минуты и 34 секунды
Тоесть тут самым лёгким будет связать окно CRT с файлом и файл потом в динамику? Можно буз файла обойтись?
PM MAIL   Вверх
volvo877
Дата 6.6.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Цитата(digitech @  6.6.2008,  13:25 Найти цитируемый пост)
из файла считываются данные/записи в которых несколько полей - это всё выводится в таблицу.И я не знаю как каждую строку таблицы занести в один элемент списка, причём таких таблиц может быть несколько.
Ты скажи конкретно, какого типа файл, и что ты хочешь в таблице №1, №2, №3... Тогда будем думать, как организовать заполнение списка, чтоб не было необходимости переписывать каждый раз все процедуры под другое содержимое списка...
PM MAIL   Вверх
digitech
Дата 6.6.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот запись куда считываются данные из файла и выводятся в таблице.


Код

 Date     = Record
        Year   : word;
        Month  : word;
        Day    : word;
        end;

      Rec_3_3  = ^Rec_3;
      Info_3   = Record
        FIO     : string[60];
        Adress  : string[60];
        service  : string[60];
        cost    : word;
        amount  : byte;
        Acceleration : boolean;
        data_start : Date;
        data_end   : Date;
        sum     : longint;
        end;
      Rec_3    = Record
        Info    : Info_3;
        next    : Rec_3_3;
        end;

 f_3 = file of Info_3;

Var   Customer : Info_3;
        Order : f_3;

Procedure FileToDynOrder; {из файла в динамику}
var temp: Rec_3_3;
begin
reset(order);
StartOrder:=NIL; TDynOrder:=NIL;
While not eof(order) do
begin
read(order, customer);
new(temp);
temp^.info := customer;
temp^.next := nil;
if StartOrder = nil then StartOrder := temp
   else TDynOrder^.next := temp;
TDynOrder := temp;
end;
close(order);
end;

Procedure CustomerTablicF;
var acc:string[3];
begin
With Customer do
begin
 if Acceleration then Acc:='да' else acc:='нет';
 Writeln(' ╔════════════════════════╤═════════════════════════════════════════════╗');
 Writeln(' ║ Ф.И.О                  │',FIO :44,' ║');
 Writeln(' ║ Адресс                 │',Adress :44,' ║');
 Writeln(' ║ Уcлуга                 │',Service :44,' ║');
 Writeln(' ║ Стоимость услуги       │',Cost :44,' ║');
 Writeln(' ║ Количество             │',Amount :44,' ║');
 Writeln(' ║ Срочность              │',Acc :44,' ║');
 Writeln(' ║ Дата заказа            │',
 IntToStr(data_start.day)+':'+IntToStr(data_start.month)+
 ':'+IntToStr(data_start.year) :44,' ║');
 Writeln(' ║ Дата окончания работ   │',
 IntToStr(data_end.day)+':'+IntToStr(data_end.month)+
 ':'+IntToStr(data_end.year) :44,' ║');
 Writeln(' ║ Итог\сумма             │',Sum :44,' ║');
 Writeln(' ╚════════════════════════╧═════════════════════════════════════════════╝');
end;
end;

Procedure VeiweDataCustomer;
begin
reset(order);
While not eof(order) do
begin
read(order, Customer);
CustomerTablicF; {вывод таблицы }
end;
close(order);
readkey;
end;

На экране получается вроде этого (просто я ещё не доработал, - будут выводиться данные, которые не содержит запись (к примеру, в конце итог всего)):
user posted image


Это сообщение отредактировал(а) digitech - 6.6.2008, 17:25
PM MAIL   Вверх
dumb
Дата 6.6.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



off: адрес пишется с одной с smile
PM MAIL   Вверх
digitech
Дата 6.6.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Думаю что придётся записать в файл и с него выводить.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

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

3. Оффтопить

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

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

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


 




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


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

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