Работа с DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Работа с DBGrid

Сообщение Brainenjii » 21.01.2010 19:52:53

Глупый, наверное, вопрос, но чем плох TextRect? Само всё перенесётся, надо только высоту рассчитывать
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Работа с DBGrid

Сообщение Ustas » 22.01.2010 19:29:04

Brainenjii писал(а):Глупый, наверное, вопрос, но чем плох TextRect? Само всё перенесётся, надо только высоту рассчитывать

http://www.tspu.tula.ru/ivt/old_site/um ... /1009.html

Это первое что попалось в интернете при поиске TextRect.
Ustas
постоялец
 
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: Работа с DBGrid

Сообщение Brainenjii » 22.01.2010 23:16:47

viewtopic.php?f=5&t=5220&st=0&sk=t&sd=a&start=15#p38498 - так вот жеж... Всё переносится... По-крайней мере должно... Блин, хочу поставить лазарус дома ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Работа с DBGrid

Сообщение Ustas » 24.01.2010 14:17:49

Я пока остановился на:
Код: Выделить всё
procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  R: TRect;
  Flag: Cardinal;
begin
  case TDBGrid(Sender).Columns[Column.Index].Alignment of
    taCenter:       Flag := DT_CENTER;
    taLeftJustify:  Flag := DT_LEFT;
    taRightJustify: Flag := DT_RIGHT;
  end;
  Flag := Flag or DT_WORDBREAK;
  R := Rect;
  Inc(R.Left, 3);  // отступ слева
  Inc(R.Top, 3);   // отступ сверху
  Dec(R.Right, 3); // отступ справа
  TDBGrid(Sender).Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
  DrawText(DBGRid.Canvas.Handle,
           PChar(Trim(UTF8ToAnsi(Column.Field.Text))),
           Length(Trim(UTF8ToAnsi(Column.Field.Text))),
           R,
           Flag);
end;


Не центрует по вертикали, немного видно кайму от Rectangle, но работает.
Может позже вернусь... А пока займусь глюкамы в свое программе, с OpenOffice вляпался... Ё...
Ustas
постоялец
 
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: Работа с DBGrid

Сообщение Ism » 04.05.2011 16:37:00

Мой пример кода для раскраски на полосы
Почемуто DefaultDrawColumnCell в Delphi работает , а в Lazarus нет

Код: Выделить всё
procedure TFormMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (TDBGrid(Sender).DataSource.DataSet.RecNo mod 2) = 0 then
                  begin
                    DBGrid1.Brush.Color:=clActiveBorder;
                    DBGrid1.Canvas.Font.Color:= clBlack;
                  end
                  else
                  begin
                    DBGrid1.Canvas.Brush.Color:=clMenuBar;
                    DBGrid1.Canvas.Font.Color:= clBlack;
                  end;

   if (gdSelected in State) then
                      begin
                          DBGrid1.Canvas.Font.Color:= clWhite;
                          DBGrid1.Canvas.Brush.Color := clGreen;
                      end;
   if (DBGrid1.DataSource.DataSet.fieldbyname ('color_otmetka').AsInteger>0) then
   begin
     DBGrid1.Canvas.Font.Color:= clBlack;
     DBGrid1.Canvas.Brush.Color := DBGrid1.DataSource.DataSet.fieldbyname ('color_otmetka').AsInteger;
   end;

   if Column.FieldName='name' then
   begin
     if DBGrid1.DataSource.DataSet.FieldByName('vozvratnost').AsInteger=0 then DBGrid1.Canvas.Brush.Color:=RGBToColor(255,77,0);
   end;
   DBGrid1.Canvas.FillRect(Rect);
   DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, Column.Field.Text );
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Работа с DBGrid

Сообщение vitaly_l » 11.02.2014 22:25:42

Мне нужно ввести данные. Делаю как в примере:

Код: Выделить всё
DBGridSomeName.DataSource.DataSet.fieldbyname('fieldName').Text := '1 привет!'; // это TDBGrid // работает данные вносятся
DBSomeName.FieldByName('fieldName').Text := '2 привет!';  // это TDbf; // работает данные вносятся


Данные чудесно вводятся, но потом пропадают (если походить по Grid).
Пробовал сказать: DBSomeName.Post; - ругается говорит мол ничего не менялось...
Сказать ей: DBSomeName.Modified := true; не разрешает...

:?: Что нужно ей сказать чтобы запомнила изменения?
:?: Или что ей нужно сказать чтобы она поняла что изменения есть?

Заранее всем благодарен за ответ.


.

Добавлено спустя 52 минуты 56 секунд:
Всё нашёл.
Нужно делать так:

Код: Выделить всё
DBSomeName.Edit;
DBSomeName.FieldByName('fieldName').Text := 'привет!';
DBSomeName.Post;


Извините что отвлёк от более важных дел.

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 222

Рейтинг@Mail.ru