How to, set cell border in table (show, hide) ?

General TRichView support forum. Please post your questions here
Post Reply
Darken
Posts: 11
Joined: Tue Jul 22, 2014 1:30 pm

How to, set cell border in table (show, hide) ?

Post by Darken »

Hello Sergey!

I'm insert table in RichViewEdit, and need set show or hide borders as MS Word. (I'm need use drop down list as Word)

var table: TRVTableItemInfo;
r, c: integer;
begin
table := TRVTableItemInfo.CreateEx(Y + 1, X + 1, RVE.RVData);

table.Color := clNone;
table.BorderStyle := rvtbColor;
table.CellBorderStyle := rvtbColor;

table.BorderColor := clBlack;
table.BorderWidth := 0;
table.BorderVSpacing := 0;
table.BorderHSpacing := 0;
table.CellBorderWidth := 1;
table.CellPadding := 2;
table.CellVSpacing := -1;
table.CellHSpacing := -1;
table.BestWidth := -100;

for r := 0 to table.Rows.Count-1 do
for c := 0 to table.Rows[r].Count-1 do
table.Cells[r,c].BestWidth := 100;

if RVE.InsertItem('', table) then begin
end;
end;


- How to recognize, keybord cursor in table cell? (IsCellSelected(Y, X) - does't work)
- How to hide left, right.. etc. border? but if hide all borders, not visible only in selection borders.

var
item: TCustomRVItemInfo;
table: TRVTableItemInfo;
Data: Integer;
rve_E: TCustomRichViewEdit;
ItemNo: Integer;
X, Y: integer;
begin

if not RVE.CanChange or
not RVE.GetCurrentItemEx(TRVTableItemInfo, rve_e, item) then
exit;


table := TRVTableItemInfo(item);
ItemNo := RVE_E.GetItemNo(table);
RVE_E.BeginItemModify(ItemNo, Data);

for Y := 0 to table.RowCount - 1 do
for X := 0 to table.ColCount - 1 do
begin
if table.IsCellSelected(Y, X) then begin
table.SetCellVisibleBorders(false, false, false, false, Y, X);
end;
end;

RVE_E.EndItemModify(ItemNo, Data);
RVE_E.Change;

rve.Format;


В двух словах на русском, добавить таблицу могу, границы тонкие тоже все ок. Дальше как в ворде нужно устанавливать, левую/правую границы по желанию пользователя, с этим моментом возникли проблемы.
- как определить что курсор в ячейке?, а выделить одну ячейку не очень получается;
- если выделена область в таблице, границы выключаются для всего диапазона выделенных ячеек, но внешние границы, в случае выше приведенного кода остаются, хотелось бы что бы и их можно было отключать;
- еще вопрос касательно границ, есть границы таблицы, а есть просто границы в тексте. Так вот выделяем какую то часть текста добавляем границы, добавляются сразу на всю строку (в ворде только выделенные слова)

ParaBorder.Top := true;
ParaBorder.Bottom := true;
ParaBorder.Right := true;
ParaBorder.Left := true;
rve.ApplyParaStyleConversion(PARA_BORDER);


procedure rveParaStyleConversion
PARA_BORDER:
begin
ParaInfo.Border.VisibleBorders.SetValues(
ParaBorder.Left,
ParaBorder.Top,
ParaBorder.Right,
ParaBorder.Bottom);
ParaInfo.Border.Width := 1;
ParaInfo.Border.Style := rvbSingle;
end;

при нажатии Энтер, происходит обвод границ новой строки (в ворде иначе, там расширяется граница).
По сути задача совместить границы что бы работали и для таблицы и для обычного текста работали корректно.

Заранее спасибо! (и извиняюсь за свой корявый английский)
Sergey Tkachenko
Site Admin
Posts: 17559
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

Keyboard in table cell:
For the table received from GetCurrentItemEx, call GetEditedCell.

TRichView tables have borders around each cell (you can change them using SetCellVisibleBorders) and a border around the table (SetTableVisibleBorders)

In MS Word, characters may have borders too, so it can apply borders to characters, paragraphs, cells (but it does not have a border around tables)
In TRichView, characters do not have borders, so you can apply them to paragraphs, cells and tables. However, styles of borders are different for paragraphs and for cells/tables.
Darken
Posts: 11
Joined: Tue Jul 22, 2014 1:30 pm

Post by Darken »

Thank you Sergey for quick answer.

But I have new question. When I'm select cell's of table (multiselect), how catch event? (when select complete).

OnCurTextStyleChanged - work only for non selected tables cells.

Maybe exist best desion for catch event, when user complete select cells in table?

Thank You!

(Повторюсь на русском. Есть таблица, в которой границы включены или выключены (отображение), и есть так же кнопки с помощью которых пользователь может эти самые границы включить или выключить (это делаю), но нужно еще что бы на этих кнопках корректно отображалось есть граница или нет, если одна ячейка OnCurTextStyleChanged и могу определить что в ячейке есть/нету границ. Но когда выделяю много ячеек, в это событие ничего не приходит, возможно есть лучшее решение?

Заранее спасибо! )
Sergey Tkachenko
Site Admin
Posts: 17559
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

OnSelect occurs when the selection is changed - not necessary in tables, but in tables too
Post Reply