Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#1: 2009-07-30 14:31:13 ЛС | профиль | цитата
Хотелось бы точку StrDelimiter. Частенько бывают ситауации, когда никакой символ использовать в качестве разделителя нельзя, потому что любойсимвол может быть в таблице. Тогда можно сделать разделителем, например, табуляцию. Но её в параметрах не задашь. Тогда нужно это делать так:

code_2357.txt

А точку подключить как раз к StrDelimiter.
карма: 9
0
файлы: 1code_2357.txt [518B] [728]
Разработчик
Ответов: 26135
Рейтинг: 2126
#2: 2009-07-30 15:39:07 ЛС | профиль | цитата
3042 писал(а):
Тогда можно сделать разделителем, например, табуляцию. Но её в параметрах не задашь

Точно, а 9 не катит
карма: 22

0
Ответов: 1926
Рейтинг: 172
#3: 2009-07-30 16:07:16 ЛС | профиль | цитата
nesco, спасибо, катит!

И тем не менее - бывает необходимость сменить символ-разделитель. Так что вопрос о точке остаётся.
карма: 9
0
Ответов: 1926
Рейтинг: 172
#4: 2009-07-31 10:45:58 ЛС | профиль | цитата
code_2359.txt

Нажимаю на первую строку, допустим, на первую ячейку. В заголовке формы отображается текст ячейки. Щёлкаю по третьей ячейке и по любой в этой же строке - ничего не меняется!
Если щёлкнуть вне первой строки, а потом по другой ячейки первой строки, то будет её текст в заголовке формы.

Почему не выдаётся текст другой ячейки, если нажатие на этой же строке?
карма: 9
0
файлы: 1code_2359.txt [665B] [683]
Разработчик
Ответов: 26135
Рейтинг: 2126
#5: 2009-07-31 11:19:52 ЛС | профиль | цитата
3042 писал(а):
Почему не выдаётся текст другой ячейки, если нажатие на этой же строке?


В описании к точке сказано, что

onClick=Событие происходит всякий раз после выбора строки таблицы и выдает индекс строки в поток
Строка уже выбрана, вот повторное событие и не выставляется, желательно, в таком случае, делать так


Add(MainForm,4134994,392,112)
{
WindowsState=2
}
Add(StringTableMT,11011814,238,112)
{
Width=392
Height=228
Align=5
Font=[MS Sans Serif,10,1,0,1]
Columns=#1:А|5:Б=150|5:В=150|5:Г=150|1:Д|1:Е|
Flat=1
TabGridFrame=0
TableWBreak=0
SingleString=0
Grid=0
Gradient=0
HeaderDragDrop=0
ShadowColor=65535
IconsCheck=[]
MiscIcons=[]
Icons=[]
StringsStrLst=#42:Файл 1;Через 2 мин;По требованию;ДА;Нет;Да|
AutoTblStrLst=0
Point(Cell)
Point(PerPage)
Point(onMouseDown)
link(onMouseDown,14854611:doTimer,[(278,125)(278,118)])
}
Add(DoData,15837090,336,112)
{
link(onEventData,4134994:doCaption,[])
link(Data,11011814:Cell,[(342,100)(303,100)(303,162)(258,162)])
}
Add(Timer,14854611,287,112)
{
Interval=25
Enable=1
AutoStop=1
link(onTimer,15837090:doData,[])
}

Таймер нужен для получения гарантированного значение ячейки под курсором
карма: 22

0
Ответов: 1926
Рейтинг: 172
#6: 2009-07-31 12:18:58 ЛС | профиль | цитата
nesco, спасиб, как-то сам не догадался...
карма: 9
0
Ответов: 1926
Рейтинг: 172
#7: 2009-08-01 11:19:45 ЛС | профиль | цитата
Add(MainForm,2953706,294,210)
{
}
Add(StringTableMT,3470814,182,203)
{
Left=25
Top=30
Width=295
Columns=#1:1|1:2|1:3|
IconsCheck=[]
MiscIcons=[]
Icons=[]
StringsStrLst=#5:а;б;в|5:а;б;в|5:а;б;в|5:а;б;в|
AutoTblStrLst=0
Point(onPaint)
link(onPaint,2953706:doCaption,[])
}

Если задействовать точку onPaint, то данные в таблице вообще не выводятся! А также не рисуется сетка таблицы.
карма: 9
0
Разработчик
Ответов: 26135
Рейтинг: 2126
#8: 2009-08-01 11:27:12 ЛС | профиль | цитата
3042 писал(а):
Если задействовать точку onPaint, то данные в таблице вообще не выводятся!

onPaint не поддерживается этим компонентом, у него есть собственный обработчик отрисовки
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#9: 2009-08-01 12:11:38 ЛС | профиль | цитата
nesco писал(а):
onPaint не поддерживается этим компонентом
тогда зачем точка ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26135
Рейтинг: 2126
#10: 2009-08-01 12:26:12 ЛС | профиль | цитата
Tad писал(а):
тогда зачем точка ?

Завязывай вопросы, на которые сам знаешь ответ, и которые уже не в первый раз обсуждались, и ты прекрасно знаешь, что эта точка -- наследник WinControl
карма: 22

0
Ответов: 1926
Рейтинг: 172
#11: 2009-08-01 12:28:15 ЛС | профиль | цитата
nesco писал(а):
него есть собственный обработчик отрисовки

какой?
карма: 9
0
Разработчик
Ответов: 26135
Рейтинг: 2126
#12: 2009-08-01 12:44:45 ЛС | профиль | цитата
3042 писал(а):
какой?

Тот самый, который отрисовывает цветные строки и работает в режиме TableWBreak. Внутри компонента он называется _OnLVCustomDraw. Сразу скажу, что понять его работу не так просто, как кажется на первый взгляд и строится она по принципу последовательной отрисовки.
На данный момент ни в одной таблице нет события, позволяющего разрешить пользовательскую отрисовку, предоставляя пользователю контекст окна.
------------ Дoбавленo в 12.54:
Добавлю, что полнофункциональный обработчик отрисовки таблицы реализован в MTStrTbl в спарке с MST_DrawManager. Полнофункциональный обработчик в StringTableMT не планируется, по причине того, что данная таблица является промежуточной между старыми технологиями "все в одном" и новой технологии менеджеров и спецэлементов из которых можно создавать таблицу по твоему усмотрению, не таская за собой ненужный код
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#13: 2009-08-01 12:59:40 ЛС | профиль | цитата
nesco писал(а):
Завязывай вопросы, на которые сам знаешь ответ
Знаю, но если завязать один вопрос, потом второй, третий и т.д. , то потом только подтверждение твоего девиза: "Нет ничего более постоянного, чем временное!"
Просто эту точку убрать из WinControl.ini - его используют 50 ini-файлов, а применяется onPaint всего в 14 компонентах. Вот в эти 14 её и дописать. И вопросы отпадут сами собой.


------------ Дoбавленo в 13.10:
Вот список который выдал мой анализатор:

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1onpaint.png [3.9KB] [553]
Ответов: 1926
Рейтинг: 172
#14: 2009-08-01 13:37:01 ЛС | профиль | цитата
Я вообще-то хотел сделать так, чтобы в одной из колонок отображались флажки. Причём всегда, а не только в режиме редактирования. Для этого решил использовать InlineCode.

Вот это происходит при добавлении строки в таблицу.
code_2360.txt

Однако при использовании ползунка в таблице флажки не хотят перемещаться вслед за строками. Приходится делать перерисовку.

procedure THiAsmClass.TableRePaint;
var i:integer;
r:TRect;
begin
TableCtl := PControl(ToIntegerEvent(dParentTable));
if TableCtl.LVCount = 0 then exit;

for i:=0 to TableCtl.LVCount do
begin
r := TableCtl.LVItemRect(i, lvipBounds);
PControl(ArrayOfCB.Items[i]).top := r.top;
end;
end;

Однако перерисовка происходит долго при большом количестве строк (>1000).
Нет ли способа сделать отрисовку быстрее?

[size=-2]------ Добавлено в 13:37
TableRePaint - это OnLVCustomDraw
карма: 9
0
файлы: 1code_2360.txt [723B] [602]
Гость
Ответов: 17029
Рейтинг: 0
#15: 2009-08-01 13:59:30 правка | ЛС | профиль | цитата


Редактировалось 6 раз(а), последний 2021-06-24 07:38:13
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)