1 (edited by agatlogic101 2020-02-27 13:45:18)

Topic: зачеркнуть текст

как зачеркнуть текст в tablgrid, и сделать его серым или бледным при checkbox=1? что бы получилось что-то подобное
https://b.radikal.ru/b10/2002/5d/908980ae24f1.jpg

Re: зачеркнуть текст

Здравствуй Agatlogic,
Возможно, попробуйте это так
Derek.

Post's attachments

Attachment icon greyouttest.zip 334.97 kb, 224 downloads since 2020-02-27 

Re: зачеркнуть текст

derek wrote:

Здравствуй Agatlogic,
Возможно, попробуйте это так
Derek.

Ваш пример в "Memo", а меня интересует в "table gride"
переделал пример под задачу. Заранее спасибо

Post's attachments

Attachment icon greyouttest.rar 294.35 kb, 224 downloads since 2020-02-27 

Re: зачеркнуть текст

Попробуйте так

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;
Dmitry.

5 (edited by agatlogic101 2020-02-27 17:53:21)

Re: зачеркнуть текст

Я попытался добавить строку
Form1.TableGrid1.dbUpdate;
в конце кода , что бы обновить таблицу, и все поля где есть зачёркнутость, что бы они ушли в низ. Но вылетает ошибка. Причём всё срабатывает, сортировка происходит, но ошибка зачем то выскакивает.
https://a.radikal.ru/a05/2002/e0/e9b7fd31f30d.jpg

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;

https://d.radikal.ru/d32/2002/97/0857a5682abb.jpg

Re: зачеркнуть текст

С какой целью вы добавили эту строку?

Dmitry.

Re: зачеркнуть текст

как я показал выше в скрине, у меня стоит сортировка, и данной строкой я обновляю таблицу после того как произошли изменения. Что бы отмеченные записи ушли вниз сразу, а не после следующего открытия формы

Re: зачеркнуть текст

Скачайте пожалуйста последнюю бета версию, я добавил событие для грида OnAfterEdit, в данном событии можно вызвать сортировку по колонке
https://www.dropbox.com/s/gczabpgu8tyei … a.zip?dl=0


Ваш доработанный проект:

Post's attachments

Attachment icon greyouttest_fixed.zip 7.81 kb, 226 downloads since 2020-02-28 

Dmitry.