OberonCore
https://forum.oberoncore.ru/

Приличный пример использования StdTables?
https://forum.oberoncore.ru/viewtopic.php?f=35&t=3268
Страница 1 из 1

Автор:  Иван Денисов [ Пятница, 18 Февраль, 2011 19:20 ]
Заголовок сообщения:  Приличный пример использования StdTables?

Понадобилось вывести таблицу, вроде из стандартных подсистем для этого есть StdTables. Но не удалось найти пример использования и в документации достаточно сухо. Есть подсистема Grid, но хотелось бы обойтись стандартными средствами, благо таблица не сложная.

Поделитесь примером, пожалуйста!

Или, что я делаю не так? Открывается серый кварат...
Код:
   PROCEDURE LogT*;
      VAR j, i: INTEGER; t1, t2: SqlDB.Table; money: Money;
         temp1, temp2: ARRAY 50 OF CHAR; sum, ttt: REAL; user: User; rec: Rec;
         table: StdTables.Table;
         p: Controls.Prop;
   BEGIN
      IF db = NIL THEN Start() END;
      IF db # NIL THEN
         db.Exec("USE [DCentre_Discount]");
         Query(db, "SELECT * FROM Cards", t1);
         IF t1.rows > 0 THEN
            db.Exec("USE [DCentre]");
            NEW(p);
            p.link := ""; p.label := ""; p.guard := ""; p.notifier := "";
            p.level := 0; p.opt[Controls.sorted] := TRUE;
            
            table.SetSize(t1.rows, 2);
            FOR i := 0 TO t1.rows - 1 DO
               t1.Read(i, user);
               Strings.IntToString(user.ID_Man, temp1);
               Query(db, "SELECT  ID_Man, Card_Number, SurName, Name, Secname, BirthDay, Phone  FROM Man WHERE ID_Man = " + temp1$, t2);
               IF t2.rows > 0 THEN
                  table.SetItem(i, 0, rec.Card_Number$);
                  table.SetItem(i, 1, rec.SurName$)
               END
            END;
            Views.OpenAux(StdTables.dir.NewControl(p), "Test")
         END
      END
   END LogT;

Автор:  Пётр Кушнир [ Пятница, 18 Февраль, 2011 20:54 ]
Заголовок сообщения:  Re: Приличный пример использования StdTables?

во-первых в p.link должен стоять адрес экспортированой переменной типа StdTables.Table, т.н. интерактор, например:
Код:
MODULE MyModule;

VAR t1*: StdTables.Table;
<...>
p.link:='MyModule.t1';


Во-вторых, так как таблица контрол сложный, то у него есть ещё свои особые пропиртя. Их тоже можно установить программно, но, как я понял из примера, лучше, если создать форму и разместить на ней контрол руками, и заполнить в свойствах контрола поле Link.

Автор:  Пётр Кушнир [ Пятница, 18 Февраль, 2011 20:57 ]
Заголовок сообщения:  Re: Приличный пример использования StdTables?

А открывать форму, сохранённую на диске(обычно в каталоге Rsrc), можно командой StdCmds.OpenAuxDialog.

Автор:  Info21 [ Пятница, 18 Февраль, 2011 21:01 ]
Заголовок сообщения:  Re: Приличный пример использования StdTables?

divan писал(а):
Понадобилось вывести таблицу
Можно попросить намеком хотя бы: почему не получается ограничиться табулированной табличкой в тексте? с парой Rulers?

Автор:  Евгений Темиргалеев [ Пятница, 18 Февраль, 2011 21:25 ]
Заголовок сообщения:  Re: Приличный пример использования StdTables?

Да, уточните постановку задачи, пожалуйста.

Таблицу нужно вывести для печати, для интерактива?

P.S. я предпочитаю увернуться от использования контролов (и м.б. буду полезен в этом деле)... Таблицей пока пользоваться не доводилось, тут я пас...

Автор:  Иван Денисов [ Суббота, 19 Февраль, 2011 06:15 ]
Заголовок сообщения:  Re: Приличный пример использования StdTables?

Большое спасибо Петру. Все получилось! Таблица нужна для наглядности и интерактива, чтобы через нее можно было менять значения в базе данных.

Пока получился вот такой пример с таблицей, пока без интеректива, просто вывод без заранее приготовленного контрола.
Код:
MODULE MyTest;
   IMPORT Controls, StdTables, Views, Strings;
   VAR
      t1*: StdTables.Table; p: Controls.Prop;
   PROCEDURE Do*;
      VAR i, j: INTEGER; temp: ARRAY 20 OF CHAR;
   BEGIN
      NEW(p);
      p.link := "MyTest.t1"; p.label := ""; p.guard := ""; p.notifier := "";
      p.level := 0; p.opt[Controls.sorted] := TRUE;
      t1.SetSize(100, 2);
      t1.SetLabel(0, "i");
      t1.SetLabel(1, "i*i");
      FOR i := 0 TO 99 DO
         Strings.IntToString(i, temp);
         t1.SetItem(i, 0, temp$);
         Strings.IntToString(i*i, temp);
         t1.SetItem(i, 1, temp$);
      END;
      Views.OpenAux(StdTables.dir.NewControl(p), "Test table")
   END Do;

END MyTest.Do

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/