Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#1: 2017-05-09 15:34:07 ЛС | профиль | цитата
Вопрос 1:
nesco, можно ли сделать, чтобы надписи в шапке выводились всегда по центру колонок.
Для статической шапки - поигрался с пробелами и вроде нормально, а вот при загрузке имен колонок с БД ещё тот геморрой.
Что-то посоветуешь или опять KOL виноват ?
Вопрос 2:
Таблица MTStrTBL. Сначала выводит значения на экран, а потом Автоматически устанавливает ширину колонок. Получается гармошка.
По моему должно быть наоборот.

Редактировалось 2 раз(а), последний 2017-05-09 15:49:48
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Nickname
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26061
Рейтинг: 2120
#2: 2017-05-09 16:16:08 ЛС | профиль | цитата
Tad писал(а):
Для статической шапки - поигрался с пробелами и вроде нормально, а вот при загрузке имен колонок с БД ещё тот геморрой.
Что-то посоветуешь или опять KOL виноват ?

Это не KOL виноват, это виноват сабконтрол таблицы -- заголовок, к нему нет доступа при помощи методов KOL.
Tad писал(а):
Сначала выводит значения на экран, а потом Автоматически устанавливает ширину колонок

Конкретно, о каком элементе речь?
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#3: 2017-05-09 16:59:54 ЛС | профиль | цитата
Add(MST_ColAction,10440563,280,238)
{
Action=6
MinColWidth=40
MaxColWidth=200
MSTControl="tab1"
}
Начинает изменять ширину колонок, когда уже заполненная таблица на экране.
Когда выводишь по Limit Offset - эффект что кто-то играет на гармошке - сначала выводится картинка с колонками шириной вроде 80, а потом колонки растягиваются.

Редактировалось 1 раз(а), последний 2017-05-09 17:05:37
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2017-05-09 20:03:06 ЛС | профиль | цитата
Tad писал(а):
Когда выводишь по Limit Offset - эффект что кто-то играет на гармошке - сначала выводится картинка с колонками шириной вроде 80, а потом колонки растягиваются.

Ну и как ты это предполагаешь исправить, если изначально неизвестна длина текста?

Редактировалось 1 раз(а), последний 2017-05-09 20:03:48
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#5: 2017-05-13 11:23:33 ЛС | профиль | цитата
nesco писал(а):
Ну и как ты это предполагаешь исправить

Пока никак.
========================================
было


procedure THIStringTable.SetColumns;
var lst:PStrList;
i:word;
s:string;
begin
lst := NewStrList;
lst.text := col;
if lst.Count > 0 then
for i := 0 to lst.Count-1 do
begin
s := Lst.Items[i] + '=';
Control.LVColAdd(GetTok(s,'='),taLeft,80);
if s <> '' then
Control.LVColWidth[i] := max(0,str2int(s));
end;
lst.Free;
end;
исправил на


procedure ThiStringTable.SetColumns; //13.05.2017 Tad
var lst:PStrList;
i:word;
s:string;
begin
lst := NewStrList;
lst.text := col;
if lst.Count > 0 then
for i := 0 to lst.Count-1 do
begin
s := Lst.Items[i] + '=';
Control.LVColAdd(GetTok(s,'='),taLeft,80);
if s <> '' then Control.LVColWidth[i] := str2int(GetTok(s,'='));
if s <> '' then Control.LVColAlign[i] := TTextAlign(str2int(s));
end;
lst.Free;
end;
Ну и конечно в StringTable.ini

+Columns=Параметры столбцов таблицы (формат строки параметров: Название=Ширина=Индекс выравнивания 0-Left; 1-Right; 2-Center)|5|
Хоть в статике можно задать Align.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#6: 2017-05-13 12:36:50 ЛС | профиль | цитата
Tad писал(а):
Хоть в статике можно задать Align

А ты еще и в динамике хочешь, но тогда это только для MT-таблиц можно сделать?
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#7: 2017-05-13 12:58:20 ЛС | профиль | цитата
nesco писал(а):
А ты еще и в динамике хочешь
Ну для динамики StringTable нужно аналогично изменить doAddColumn и
переделать DSC_Query и SQLite_Query чтобы выдавали массив колонок в нужном формате с автоопределением размеров колонок и Align колонок по типу данных в БД (TEXT - 0, всё остальное - 1)
или, не переделывая компоненты, сформировать шапку с помощью запроса.
SELECT "Наименование="||
CASE WHEN max(length(name)*8)>250 THEN 250 ELSE max(length(name)*8) END||
"="||CASE typeof(name) WHEN "text" THEN 0 ELSE 1 end,
"Информация="||CASE WHEN max(length(info)*8)>250 THEN 250 ELSE max(length(info)*8) END||
"="||CASE typeof(info) WHEN "text" THEN 0 ELSE 1 end
FROM elements;

Результат:
Наименование=250=0
Информация=250=0

Редактировалось 6 раз(а), последний 2017-05-13 20:30:41
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
2
Голосовали:Nickname, Dseren
Разработчик
Ответов: 26061
Рейтинг: 2120
#8: 2017-05-14 16:44:30 ЛС | профиль | цитата
В MT-таблицу я добавил автовыравнивание столбцов по заголовку, кроме последнего, тот выравнивается по максимальной ширине, но это так задумано мелкомягкими, увы. Если поставить макс-ширину в ноль, то последний столбец выровняется до конца таблицы.

Редактировалось 1 раз(а), последний 2017-05-14 16:45:32
карма: 22

1
Голосовали:Konst
Ответов: 16884
Рейтинг: 1239
#9: 2017-05-14 16:54:59 ЛС | профиль | цитата
nesco, пока думаю.
Может засунуть два листа - от одного взять голову, а от второго тело и связать их между собой шириной колонок ?
Или самому нарисовать таблицу специально для SQLite ? Передал прямо в таблицу запрос и и она отрисовалась.
Сейчас смотаемся с правнуком на пару часиков в басейн - потом будем думать.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)