Новые книги

Книга обучает начинающих пользователей основам работы на компьютере. Описано строение компьютера, назначение его комплектующих, операционная система Windows, объяснены принципы работы с различными наиболее употребительными прикладными программами.
Наше знание о медиа пиратстве обычно начинается и часто заканчивается исследованием, финансируемым отраслью. Для этого есть весомые основания.

Американские ассоциации отраслей программного обеспечения, фильмов и музыки финансировали обширные усилия по глобальному исследованию пиратства за прошлые два десятилетия, по большей части, для себя. Пиратство, несмотря на его вездесущность, было непаханым полем для независимого исследования. Эмпирические работы за прошлые десять лет, исключая отчасти исследования совместного использования файлов (файлшеринга), были редки и сосредоточены в узких областях. Сообщество интересов было столь мало, что, когда мы начали планировать этот проект в 2006, значительная его часть была включена в нашу работу. Это сообщество росло, но все еще остается ничем по масштабу сопоставлений относительно глобального, сравнительного, постоянного внимания отраслевых групп. И возможно, что еще более важно, нет ничего сопоставимого жесткой интеграции отраслевых исследований с лоббированием и кампаниями в СМИ, которые усиливают его присутствие в публичных и политических дискуссиях.

#i_001.png

Вопрос и Ответ 46

Вопросы и Ответы


      46. Возможно ли определить общую ширину всех видимых полей TDBGrid во время работы приложения?

      Желание узнать полную ширину компоненты TDBGrid возникает при необходимости отображения всей сетки без горизонтальной полосы прокрутки. При этом необходимо учитывать не только ширину всех видимых полей, но и общую ширину разделительных линий (если они есть), ширину столбца индикации (если он есть), и ширину вертикальной полосы прокрутки (есть всегда).

      Ширина одной разделительной линии равна одному пикселу, ширина столбца индикации - примерно 11-15 (в зависимости от различных факторов), ширина полосы прокрутки является системной информацией.

      Пример:

      ............

      function TForm1.GridWidth(DBG: TDBGrid):Integer;
      CONST

        cMEASURE_CHAR = '0';
        iEXTRA_COL_PIX = 4;
        iINDICATOR_WIDE = 15;

      VAR

        i, iColumns, iColWidth, iTitleWidth, iCharWidth : Integer;

      BEGIN

        {Ширина вертикальной полосы прокрутки}
        Result := GetSystemMetrics(SM_CXVSCROLL);
        iColumns := 0;
        {Ширина видимых столбцов}
        iCharWidth := DBG.Canvas.TextWidth(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 := DBG.Canvas.TextWidth(DisplayLabel);
                  IF iColWidth

                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;

      ............


...предыдущая страница следующая...
оглавление



"Вопрос и Ответ 46"
Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2024 .
При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны!
Время генерации страницы: 0.007