Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2016, 10:29   #1
Антон Иванчин
Пользователь
 
Регистрация: 25.08.2016
Сообщений: 20
По умолчанию Столбцы в DBGrid

Подскажите!
Передо мной такая задача:
мне нужно щёлкнуть кнопкой мыши на определённый столбец в DBGRid (не на заголовок) и по щелчку мышью получить название поля данных, чтобы потом изменить данные этой ячейки. Как это лучше сделать?
Антон Иванчин вне форума Ответить с цитированием
Старый 03.10.2016, 10:33   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
Dbgrid.SelectedField.Value:='новое значение';
Код:
j:=DBgrid.SelectedIndex;
f:=DBgrid.Columns.item[j].field;
f.Value:='новое значение';
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.10.2016 в 10:36.
evg_m вне форума Ответить с цитированием
Старый 03.10.2016, 10:48   #3
Антон Иванчин
Пользователь
 
Регистрация: 25.08.2016
Сообщений: 20
По умолчанию

Благодарю! Разобрался )

Последний раз редактировалось Антон Иванчин; 03.10.2016 в 10:51.
Антон Иванчин вне форума Ответить с цитированием
Старый 03.10.2016, 11:06   #4
Антон Иванчин
Пользователь
 
Регистрация: 25.08.2016
Сообщений: 20
По умолчанию

И вот всё же, если DBGrid выделяется вся строка, то можно ли получать название поля данных, по которому щёлкаешь. а то таким образом он выдаёт только первое в строке поле. А хочется чтобы и вся строка выделялась и можно было получить поле данных!
Антон Иванчин вне форума Ответить с цитированием
Старый 03.10.2016, 11:35   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
то можно ли получать название поля данных, по которому щёлкаешь
"название поля данных" или только те данных на которим переходил пользователь ? и где получить ?
xxbesoxx вне форума Ответить с цитированием
Старый 03.10.2016, 11:44   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Delphi F1
Цитата:
Returns the row and column indexes of the cell that contains a point specified in screen coordinates.

Delphi syntax:

function MouseCoord(X, Y: Integer): TGridCoord;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.10.2016, 12:12   #7
Антон Иванчин
Пользователь
 
Регистрация: 25.08.2016
Сообщений: 20
По умолчанию

По координатам мышки будет не совсем правильно ведь пользователь может изменять размер полей в форме и сдвигать их.
Антон Иванчин вне форума Ответить с цитированием
Старый 03.10.2016, 12:34   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
ведь пользователь может изменять размер полей в форме и сдвигать их.
Ну и что из этого.
Мы берем координаты мышки и ВЫЧИСЛЯЕМ какая ячейка(row and column indexes) здесь и сейчас находится по этим самым координатам.
Цитата:
Returns the row and column indexes of the cell that contains a point specified in screen coordinates.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.10.2016 в 12:36.
evg_m вне форума Ответить с цитированием
Старый 03.10.2016, 12:35   #9
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
может изменять размер полей
если реч по размер ! тогда
1)
Код:
public
     procedure MyGridSize(Grid: Tdbgrid);    //Обявыли  public процедура
2)
Код:
procedure TForm1.MyGridSize(Grid: Tdbgrid);
// Тела у этого процедур
const
  DEFBORDER = 10;
var
  temp, n: Integer;
  lmax: array [0..30] of Integer;
begin
  with Grid do
  begin
    Canvas.Font := Font;
    for n := 0 to Columns.Count - 1 do
      lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER;
    grid.DataSource.DataSet.First;
    while not grid.DataSource.DataSet.EOF do
    begin
      for n := 0 to Columns.Count - 1 do
      begin
        temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER;
        if temp > lmax[n] then lmax[n] := temp;
      end; {for}
      grid.DataSource.DataSet.Next;
    end;
    grid.DataSource.DataSet.First;
    for n := 0 to Columns.Count - 1 do
      if lmax[n] > 0 then
      Columns[n].Width := lmax[n];
  end;

end;
3)
Код:
procedure TForm1.FormResize(Sender: TObject);
begin
  Form1.MyGridSize(DBGrid1);  // Вызиваем процедур  для   DBGrid1
end;
можно так ?
xxbesoxx вне форума Ответить с цитированием
Старый 03.10.2016, 12:56   #10
Антон Иванчин
Пользователь
 
Регистрация: 25.08.2016
Сообщений: 20
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Ну и что из этого.
Мы берем координаты мышки и ВЫЧИСЛЯЕМ какая ячейка(row and column indexes) здесь и сейчас находится по этим самым координатам.
Отлично! Благодарю ) сделал как надо
Антон Иванчин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
растянуть столбцы dbgrid-a igelchen БД в Delphi 6 11.09.2015 14:51
Дана целочисленная матрица размера MXN. Найти ее столбцы, все элементы которых различны.Эти столбцы должны закрашиваться. Kate21143 Общие вопросы Delphi 2 11.06.2014 07:54
Добавляются лишние столбцы в DBGrid atihiy2010 БД в Delphi 3 23.05.2014 00:34
Калькулируемые столбцы в DBGrid Марк Охман Помощь студентам 4 22.11.2010 19:39
неподвижные столбцы DBGrid MargoNik БД в Delphi 2 27.04.2010 11:32