How to, set cell border in table (show, hide) ?
Posted: Tue Aug 12, 2014 2:54 pm
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;
при нажатии Энтер, происходит обвод границ новой строки (в ворде иначе, там расширяется граница).
По сути задача совместить границы что бы работали и для таблицы и для обычного текста работали корректно.
Заранее спасибо! (и извиняюсь за свой корявый английский)
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;
при нажатии Энтер, происходит обвод границ новой строки (в ворде иначе, там расширяется граница).
По сути задача совместить границы что бы работали и для таблицы и для обычного текста работали корректно.
Заранее спасибо! (и извиняюсь за свой корявый английский)