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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2009, 17:59   #1
Vol666
Гуру Разврата
Форумчанин
 
Аватар для Vol666
 
Регистрация: 29.07.2009
Сообщений: 373
Восклицание DBGrid и размер столбца

Вот такая проблема возникла, пишу прогу для работы с БД Аксесс, вот там много очень столбцов, проблема в том что когда DBGRID их отображает то они становятся широкими, как можно ширину столбца в ДБГРИД делать по длине текста?
Фредди вернулся))) И Готов Убивать!!!
Vol666 вне форума Ответить с цитированием
Старый 09.10.2009, 18:04   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Как одним из вариантов может быть такое:
Код:
function NewTextWidth(fntFont: TFont; const sString: OpenString): integer;
var
  fntSave: TFont;
begin
  result := 0;
  fntSave := Application.MainForm.Font;
  Application.MainForm.Font := fntFont;
  try
    result := Application.MainForm.Canvas.TextWidth(sString);
  finally
    Application.MainForm.Font := fntSave;
  end;
end;

{ вычисляем ширину табличной сетки, которую необходимо отобразить без                 }
{ горизонтальной полосы прокрутки и без дополнительного пространства между последней  }
{ колонкой и вертикальной полосой прокрутки. Свойство Datasource у компонента DBGrid, }
{ как и свойство Dataset у Datasource должны быть назначены заранее,                  }
{ но таблица не должна быть открытой. Примечание: полученная ширина включает ширину   }
{ вертикальной полосы прокрутки, полученной на основе базового режима                 }
{ отображения. Вычисленная ширина полностью занимает рабочую область компонента.      }

function iCalcGridWidth(
  dbg: TDBGrid { корректируемый компонент }
  ): integer; { "точная" ширина }
const
  cMEASURE_CHAR = '0';
  iEXTRA_COL_PIX = 4;
  iINDICATOR_WIDE = 11;
var
  i, iColumns, iColWidth, iTitleWidth, iCharWidth: integer;
begin
  iColumns := 0;
  result := GetSystemMetrics(SM_CXVSCROLL);
  iCharWidth := NewTextWidth(dbg.Font, cMEASURE_CHAR);
  with dbg.dataSource.dataSet do
    for i := 0 to FieldCount - 1 do
      with Fields[i] do
        if visible then
        begin
          iColWidth := iCharWidth * DisplayWidth;
          if dgTitles in dbg.Options then
          begin
            iTitleWidth := NewTextWidth(dbg.TitleFont, DisplayLabel);
            if iColWidth < iTitleWidth then
              iColWidth := iTitleWidth;
          end;
          inc(iColumns, 1);
          inc(result, iColWidth + iEXTRA_COL_PIX);
        end;
  if dgIndicator in dbg.Options then
  begin
    inc(iColumns, 1);
    inc(result, iINDICATOR_WIDE);
  end;
  if dgColLines in dbg.Options then
    inc(result, iColumns)
  else
    inc(result, 1);
end;
Хотя..я бы руками установил ширину и шрифт в колонках.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.10.2009, 18:38   #3
Vol666
Гуру Разврата
Форумчанин
 
Аватар для Vol666
 
Регистрация: 29.07.2009
Сообщений: 373
По умолчанию

руками каждый раз тяжело столбцов много. Странный пример, объясните пожалуйста...
Фредди вернулся))) И Готов Убивать!!!

Последний раз редактировалось Vol666; 09.10.2009 в 18:46.
Vol666 вне форума Ответить с цитированием
Старый 09.10.2009, 19:43   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Данный код не мой, но если кратко попробовать пояснить, то в коде происходит перемещение по записям и происходит подгон ширины колонки под самую длинную запись. Если такова имеется, то ширина колонки "подстраивается" под нее. Думаю, что как то так.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.10.2009, 20:09   #5
Vol666
Гуру Разврата
Форумчанин
 
Аватар для Vol666
 
Регистрация: 29.07.2009
Сообщений: 373
По умолчанию

нашёл, через менеджер столбцов можно это сделать...
Фредди вернулся))) И Готов Убивать!!!
Vol666 вне форума Ответить с цитированием
Старый 09.10.2009, 20:11   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
нашёл, через менеджер столбцов можно это сделать...
Ну, я это и имел ввиду, когда я говорил:
Цитата:
Хотя..я бы руками установил ширину и шрифт в колонках.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложение столбца в DBGrid Vitalik55 БД в Delphi 4 12.12.2012 20:42
Задание ширины столбца в DBGrid по самой широкой строке двойным щелчком x8i Общие вопросы C/C++ 0 23.06.2009 16:47
Настройки столбца в DBGrid andirock2112 БД в Delphi 3 03.06.2009 13:29
В прямоугольной матрице переставить столбцы так, чтобы сумма элементов столбца росла от первого столбца Aleo13 Помощь студентам 5 15.10.2008 18:34
DBGrid. Проблема со считыванием инфы из столбца. Teenager БД в Delphi 6 18.01.2008 15:33