Недавно добавленные исходники

•  3D Designer  829

•  Sik Screen Capture  571

•  Patch Maker  513

•  Айболит (remote control)  627

•  ListBox Drag & Drop  464

•  Доска для игры Реверси  8 589

•  Графические эффекты  561

•  Рисование по маске  441

•  Перетаскивание изображений  487

•  Canvas Drawing  488

•  Рисование Луны  380

•  Поворот изображения  259

•  Рисование стержней  315

•  Paint on Shape  189

•  Генератор кроссвордов  247

•  Головоломка Paletto  225

•  Теорема Монжа об окружностях  270

•  Пазл Numbrix  185

•  Заборы и коммивояжеры  302

•  Игра HIP  204

•  Игра Go (Го)  145

•  Симулятор лифта  180

•  Программа укладки плитки  165

•  Генератор лабиринта  204

•  Проверка числового ввода  193

•  HEX View  231

•  Физический маятник  202

•  Задача коммивояжера  233

•  Автомобильная пробка  156

•  Квадратные сетки из слов  127

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Как зафиксировать один или несколько столбцов в TDBGrid 2



Автор: Nomadic

Звонит программер своей девушке в дверь, а она не открывает.
- Неустранимая ошибка по адресу Lenin st. 10/5/44 второй этаж, - подумал программер.

Это маленькая вставка в Ваш наследник от TCustomDBGrid, которая решает данную задачу.


// DBGRIDEX.PAS
// ----------------------------------------------------------------------------

destructor TDbGridEx.Destroy;
begin

  _HideColumnsValues.Free;
  _HideColumns.Free;

  inherited Destroy;
end;

// ----------------------------------------------------------------------------

constructor TDbGridEx.Create(Component: TComponent);
begin

  inherited Create(Component);

  FFreezeCols := ?;

  _HideColumnsValues := TList.Create;
  _HideColumns := TList.Create;
end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.KeyDown(var Key: Word; Shift: TShiftState);
begin

  if (Key = VK_LEFT) then
    ColBeforeEnter(-1);
  if (Key = VK_RIGHT) then
    ColBeforeEnter(1);

  inherited;
end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.SetFreezeColor(AColor: TColor);
begin

  InvalidateRow(0);
end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.SetFreezeCols(AFreezeCols: Integer);
begin

  FFreezeCols := AFreezeCols;
  InvalidateRow(0);
end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.ColEnter;
begin

  ColBeforeEnter(0);

  if Assigned(OnColEnter) then
    OnColEnter(Self);
end;

// ----------------------------------------------------------------------------

procedure TDbGridEx.ColBeforeEnter(ADelta: Integer);
var

  nIndex: Integer;

  function ReadWidth: Integer;
  var

    i: Integer;

  begin

    i := _HideColumns.IndexOf(Columns[nIndex]);

    if i = -1 then
      result := 120
    else
      result := Integer(_HideColumnsValues[i]);
  end;

  procedure SaveWidth;
  var

    i: Integer;

  begin

    i := _HideColumns.IndexOf(Columns[nIndex]);
    if i <> -1 then
    begin
      _HideColumnsValues[i] := Pointer(Columns[nIndex].Width);
    end
    else
    begin
      _HideColumns.Add(Columns[nIndex]);
      _HideColumnsValues.Add(Pointer(Columns[nIndex].Width));
    end;
  end;

begin

  for nIndex := 0 to Columns.Count - 1 do
  begin
    if (Columns[nIndex].Width = 0) then
    begin
      if (nIndex + 1 <= FreezeCols) or (nIndex >= SelectedIndex + ADelta) then
        Columns[nIndex].Width := ReadWidth;
    end
    else
    begin
      SaveWidth;
      if (nIndex + 1 > FreezeCols) and
        (nIndex < SelectedIndex + ADelta) and
        (nIndex + 1 < Columns.Count) and
        (FreezeCols > 0) then
        Columns[nIndex].Width := 0;
    end;
  end;
end;








Copyright © 2004-2021 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter   Ссылка на Telegram