Topic: зачеркнуть текст
как зачеркнуть текст в tablgrid, и сделать его серым или бледным при checkbox=1? что бы получилось что-то подобное
My Visual Database → Russian → зачеркнуть текст
как зачеркнуть текст в tablgrid, и сделать его серым или бледным при checkbox=1? что бы получилось что-то подобное
Здравствуй Agatlogic,
Возможно, попробуйте это так
Derek.
Здравствуй Agatlogic,
Возможно, попробуйте это так
Derek.
Ваш пример в "Memo", а меня интересует в "table gride"
переделал пример под задачу. Заранее спасибо
Попробуйте так
procedure Form1_TableGrid1_OnEditAccept (Sender: TObject; ACol, ARow: Integer; Value: String; var Accept: Boolean);
begin
if (ACol=0) and (not Form1.TableGrid1.Cell[ACol,ARow].Empty) then // если изменяют значения в пятой колонке и значение не является пустым
begin
if Value = 'True' then
begin
SQLExecute('UPDATE test SET yes=1 WHERE id='+Form1.TableGrid1.sqlValue);
Form1.TableGrid1.Cell[1,ARow].TextColor := clGray;
Form1.TableGrid1.Cell[1,ARow].FontStyle := fsStrikeOut;
end else
if Value = 'False' then
begin
SQLExecute('UPDATE test SET yes=0 WHERE id='+Form1.TableGrid1.sqlValue);
Form1.TableGrid1.Cell[1,ARow].TextColor := clWindowText;
Form1.TableGrid1.Cell[1,ARow].FontStyle := 0;
end;
end;
end;
procedure Form1_TableGrid1_OnChange (Sender: TObject);
var
i, c: integer;
begin
Form1.TableGrid1.Columns[2].Visible := False; // если что, данную колонку можно скрыть так
Form1.TableGrid1.BeginUpdate;
c := Form1.TableGrid1.RowCount-1;
for i := 0 to c do
begin
// если в первой колоне (0) нет значения, то скрывает в пятой колоке (4) CheckBox, иначе присваиваем чекбоксу значение
if Form1.TableGrid1.Cells[2, i]='' then Form1.TableGrid1.Cell[0,i].Empty := True
else Form1.TableGrid1.Cell[0,i].AsBoolean := Form1.TableGrid1.Cell[2,i].AsInteger = 1; // так будет быстрей, чем для каждой строки делать SQL запрос
//else Form1.TableGrid1.Cell[0,i].AsInteger := SQLExecute('SELECT yes FROM test WHERE id='+IntToStr(Form1.TableGrid1.dbIndexToID(i))); // это может работать медленно, если в гриде много записей
if Form1.TableGrid1.Cell[0,i].AsBoolean then
begin
Form1.TableGrid1.Cell[1,i].TextColor := clGray;
Form1.TableGrid1.Cell[1,i].FontStyle := fsStrikeOut;
end else
begin
Form1.TableGrid1.Cell[1,i].TextColor := clWindowText;
Form1.TableGrid1.Cell[1,i].FontStyle := 0;
end;
end;
Form1.TableGrid1.EndUpdate;
end;
Я попытался добавить строку
Form1.TableGrid1.dbUpdate;
в конце кода , что бы обновить таблицу, и все поля где есть зачёркнутость, что бы они ушли в низ. Но вылетает ошибка. Причём всё срабатывает, сортировка происходит, но ошибка зачем то выскакивает.
procedure Form1_TableGrid1_OnEditAccept (Sender: TObject; ACol, ARow: Integer; Value: String; var Accept: Boolean);
begin
if (ACol=0) and (not Form1.TableGrid1.Cell[ACol,ARow].Empty) then // если изменяют значения в пятой колонке и значение не является пустым
begin
if Value = 'True' then
begin
SQLExecute('UPDATE test SET yes=1 WHERE id='+Form1.TableGrid1.sqlValue);
Form1.TableGrid1.Cell[1,ARow].TextColor := clGray;
Form1.TableGrid1.Cell[1,ARow].FontStyle := fsStrikeOut;
end else
if Value = 'False' then
begin
SQLExecute('UPDATE test SET yes=0 WHERE id='+Form1.TableGrid1.sqlValue);
Form1.TableGrid1.Cell[1,ARow].TextColor := clWindowText;
Form1.TableGrid1.Cell[1,ARow].FontStyle := 0;
end;
end;
Form1.TableGrid1.dbUpdate; //ОШИБКА ИЗ ЗА ЭТОЙ СТРОЧКИ
end;
С какой целью вы добавили эту строку?
как я показал выше в скрине, у меня стоит сортировка, и данной строкой я обновляю таблицу после того как произошли изменения. Что бы отмеченные записи ушли вниз сразу, а не после следующего открытия формы
Скачайте пожалуйста последнюю бета версию, я добавил событие для грида OnAfterEdit, в данном событии можно вызвать сортировку по колонке
https://www.dropbox.com/s/gczabpgu8tyei … a.zip?dl=0
Ваш доработанный проект:
My Visual Database → Russian → зачеркнуть текст
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi