X-Files Components by Krzysztof Szyszka 
Najlepszy komponent DBGrid dla Delphi 
i VCL Grid dla QuickReport Komponenty
Pobierz gratis
Pomoc techniczna
Wizytówka
Zarejestruj teraz!English version here
Database Works!
Główna strona X-Files Components English version here
Menu strony

Pomoc techniczna

Instalacja

Często zadawane pytania (FAQ)

Pomoc techniczna

W tym miejscu znajdziesz dodatkowe informacje, które pozwolą Ci efektywniej wykorzystać wiele nowych możliwości zawartych w komponentach z pakietu X-Files Components. Tutaj będą publikowane porady i sugestie oraz fragmenty kodu, pozwalające zrealizować wiele ciekawych funkcji, przy niewielkim nakładzie pracy. Jeśli zrealizowałeś w swoim projekcie coś ciekawego przy użyciu komponentów z tego pakietu i chcesz się podzielić swoim rozwiązaniem z innymi, przyślij odpowiedni fragment kodu wraz z jego opisem na mój e-mail.

Idź na początek tej strony


Rozwiązania problemów

1. Używanie komponentu TXDBGrid przy ustawieniach lokalnych Middle Eastern.

Komponent TXDBGrid obsługuje bdRightToLeft dla właściwości BiDiMode na platformach z ustawinieniami lokalnymi Middle Eastern (SysLocale.MiddleEast = True), mimo że wykryto kilka bugów w klasie przodka (TCustomGrid).

Żeby zapewnić poprawne działanie komponentu TXDBGrid, gdy SysLocale.MiddleEast jest równe True i właściwość BiDiMode jest ustawiona na bdRightToLeft, należy dokonać poprawek w module Grids.pas i dodać źródłową postać modułu Grids do swojego projektu. Poniżej znajdują się odpowiednie fragmenty pliku Grids.pas, które należy poprawić:

Fragmenty kodu umieszczone poniżej zostały już poprawione przez Embarcadero w RAD Studio XE3.


{ Potrzebne dla Delphi 5, 6, 7, 8, 2005, 2006, 2007, 2009, 2010, XE i XE2 }

function TCustomGrid.CalcCoordFromPoint(X, Y: Integer;
  const DrawInfo: TGridDrawInfo): TGridCoord;
...
begin
  if not UseRightToLeftAlignment then
    Result.X := DoCalc(DrawInfo.Horz, X)
  else
    Result.X := DoCalc(DrawInfo.Horz, ClientWidth - X);  // Added by K.S.
//  Result.X := DoCalcRightToLeft(DrawInfo.Horz, X); // Commented by K.S.
  Result.Y := DoCalc(DrawInfo.Vert, Y);
end;

Fragmenty kodu umieszczone poniżej zostały już poprawione przez Borlanda w Delphi 6.


{ Potrzebne tylko dla Delphi 5 }

procedure TCustomGrid.CalcSizingState(X, Y: Integer; var State: TGridState;
  var Index: Longint; var SizingPos, SizingOfs: Integer;
  var FixedInfo: TGridDrawInfo);

  procedure CalcAxisState(const AxisInfo: TGridAxisDrawInfo; Pos: Integer;
    NewState: TGridState);
  var
    I, Line, Back, Range: Integer;
  begin
    if NewState = gsColSizing then // Added by K.S.
    if UseRightToLeftAlignment then
      Pos := ClientWidth - Pos;


{ Potrzebne tylko dla Delphi 5 }

procedure TCustomGrid.MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
...
    if FGridState <> gsNormal then
    begin
      if FGridState = gsColSizing then // Added by K.S.
      if UseRightToLeftAlignment then
        FSizingPos := ClientWidth - FSizingPos;
      DrawSizingLine(DrawInfo);
      Exit;
    end;


{ Potrzebne tylko dla Delphi 5 }

procedure TCustomGrid.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
...
      gsRowSizing, gsColSizing:
        begin
          CalcDrawInfo(DrawInfo);
          DrawSizingLine(DrawInfo);
          if FGridState = gsColSizing then // Added by K.S.
          if UseRightToLeftAlignment then
            FSizingPos := ClientWidth - FSizingPos;
			

Wprowadzenie powyższych modyfikacji spowoduje poprawną obsługę myszy dla FixedCols i poprawne działanie zmiany wysokości wiersza przez użytkownika w komponencie TXDBGrid i w każdym komponencie wywodzącym się z klasy TCustomGrid, gdy SysLocale.MiddleEast będzie True i właściwość BiDiMode będzie ustawiona na bdRightToLeft.

Idź na początek tej strony


2. Używanie komponentu TXDBGrid przy kolumnie ukrytej w miejscu XDBGrid.ClientWidth.

Jeżeli właściwość Visible będzie False dla kolumny umieszczonej w miejscu XDBGrid.ClientWidth metoda Invalidate działa niepoprawnie. Gdy będziesz klikał na kolejne komórki będziesz mógł zobaczyć stare i nowe zaznaczenie dla tych komórek. Poniżej znajdują się odpowiednie fragmenty pliku Grids.pas, które należy poprawić:


{ Potrzebne dla Delphi 5, 6, 7, 8, 2005, 2006, 2007, 2009, 2010, XE, XE2, ..., XE8 }

procedure TCustomGrid.GridRectToScreenRect(GridRect: TGridRect;
  var ScreenRect: TRect; IncludeLine: Boolean);

  function LinePos(const AxisInfo: TGridAxisDrawInfo; Line: Integer): Integer;
...
      for I := Start to Line - 1 do
      begin
        Inc(Result, GetExtent(I) + EffectiveLineWidth);
        if Result > GridExtent + EffectiveLineWidth then // Added by K.S.
//      if Result > GridExtent then // See CalcAxis  // Commented by K.S.
        begin
          Result := 0;
          Exit;
        end;

Idź na początek tej strony


Copyright © 1999-2017 X-Files Software
X-Files Components by Krzysztof Szyszka 
Najlepszy komponent DBGrid dla Delphi 
i VCL Grid dla QuickReport