Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Позиция ячейки в TDBGrid

Delphi , Компоненты и Классы , TDBGrid

Позиция ячейки в TDBGrid

В 8 классе я впервые сконектился с девушкой на 9600бод. В 11 классе я сконектился с девушкой стандарта V90-60-90 на 56700, но стоило мне это 200 долларов за ночной анлимитед. На 2 курсе института я решил завести себе выделенную девушку. На 3 курсе я узнал от друзей, что пропускная способность моей девушки 2Мб/с, и к ней подключен не только я. На 5 курсе я хакнул многих девушек нашего курса. На 6-ом меня поймали два грузина, после этого я стал сисопом. После того как я стал сисопом, я попал на зону, где меня сделали администратором и меня хакали все кому не лень. После этого я не смог конектиться с девушкой даже на 2400. В 30 лет я пристрастился к ИЕ4, через него поймал win95CIH и нашел успокоение 26 апреля 1999г.

В TCustomGrid определен метод CellRect, который, к сожалению, защищен. Это означает, что даный метод доступен только для TCustomGrid и его наследников. Но все-таки существует немного мудреное решение вызова данного метода:


type
  TMyDBGrid = class(TDBGrid)
    public
      function CellRect(ACol, ARow: Longint): TRect;
  end;

function TMyDBGrid.CellRect(ACol, ARow: Longint): TRect;
begin
  Result := inherited CellRect(ACol, ARow);
end;

Вы можете сделать приведение типа вашего DBGrid к TMyDBGrid (это возможно, поскольку CellRect статический метод) и вызвать CellRect:


Rectangle := TMyDBGrid(SomeDBGrid).CellRect(SomeColumn, SomeRow);

procedure TfmLoadIn.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
const
  Disp = 2; //Правильно выравниваем компонент
begin
  inherited;
  if (gdFocused in State) then
  begin
    if (Column.FieldName = 'TYPEDescription') then
    begin
      dlTYPEDescription.Left := Rect.Left + DBGrid1.Left + Disp;
      dlTYPEDescription.Top := Rect.Top + DBGrid1.top + Disp;
      dlTYPEDescription.Width := Rect.Right - Rect.Left;
      dlTYPEDescription.Height := Rect.Bottom - Rect.Top;
      dlTYPEDescription.Visible := True;
    end;
  end;
end;

Вот перевод на русский язык:

Рассказ о моих приключениях с женщинами и технологиями! 😄

Теперь давайте сфокусируемся на коде.

Вы пытаетесь доступиться к методу CellRect компонента TDBGrid, который защищен. Вы создали обертку класса TMyDBGrid, которая наследуется от TDBGrid и предоставляет публичный доступ к методу CellRect.

Чтобы использовать этот обертку, вам нужно кастовать ваш компонент TDBGrid в TMyDBGrid. Это возможно потому, что CellRect - статический метод, то есть он может быть вызван без экземпляра класса.

В вашем коде вы пытаетесь сделать именно это:

Rectangle  := TMyDBGrid(SomeDBGrid).CellRect(SomeColumn, SomeRow);

Это должно работать, если SomeDBGrid - экземпляр TMyDBGrid или его потомков.

Теперь давайте перейдем к процедуре DBGrid1DrawColumnCell. Вы пытаетесь корректировать позицию контрола (dlTYPEDescription) внутри ячейки rectangle в зависимости от того, фокусирован ли столбец и соответствует ли он конкретному имени поля.

Ваш код кажется правильным, но у меня есть несколько предложений:

  • Вместо жесткого кодирования значения Disp (2)consider making it a variable or property of your form. Это позволит вам легко изменить значение смещения без изменения кода.
  • В блоке if Column.FieldName = 'TYPEDescription' then вы доступитесь к свойствам Left, Top, Width и Height контрола dlTYPEDescription. Убедитесь, что эти свойства правильно настроены перед присваиванием им значений.
  • В целом, ваш код выглядит хорошо, но я рад помочь с любыми дальнейшими вопросами или проблемами! 😊

В статье рассматривается способ вызова метода CellRect в TDBGrid, а также пример его использования в процедуре DrawColumnCell для корректного выравнивания компонента в ячейке таблицы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-11 04:15:34/0.0061578750610352/0