Autor Téma: Vlastný Navigator - prosím o posúdenie, názory a pripomienky  (Přečteno 128 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6867
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Celé riešenie vychádza zo štandardného DBNavigator-a
Kód: Delphi [Vybrat]
  1. procedure TjstIBCNavigator.BtnClick(Index: TNavButtons);
  2. begin
  3.   FLastButton := Index;
  4.   var NotDesigning := not (csDesigning in ComponentState);
  5.   FActContinue := True;
  6. .
  7.   if NotDesigning and Assigned(FDataSource) then
  8.     FOriginalState := FDataSource.State;
  9. .
  10.   if NotDesigning and Assigned(FOnBeforeAction) then
  11.   begin
  12.     ///  Ak sa nepracuje s tabuľkou, alebo to je zložitý prípad
  13.       ///  Aktualizácia všetkých dotknutých záznamov/tabuliek
  14.       ///  Potom sa už nepokračuje ďalej
  15.     ///  Nastaviť všetky korekcie, hodnoty a pod. v Table.
  16.       ///  Viď nasledujúce kontroly, kde to už musí byť
  17.     FOnBeforeAction(Self, Index);
  18.     if not FActContinue then Exit;
  19.   end;
  20. //===============================================================
  21.   if NotDesigning and (Index = ngbPost) then
  22.   begin
  23.     ///  Základná kontrola údajov podľa TDBComponent
  24.     DoCheckData;
  25.     if not FActContinue then Exit;
  26.   end;
  27. .
  28.   if NotDesigning and Assigned(FOnNavClick) then
  29.   begin
  30.     ///  Ďalšie kontroly, ak sú potrebné, v klientovi
  31.     FOnNavClick(Self, Index);
  32.     if not FActContinue then Exit;
  33.   end;
  34. .
  35.   if NotDesigning then
  36.   begin
  37.     ///  Samotné vykonanie akcie. Tu už musí byť všetko v poriadku !!!
  38.     DoBtnClick(Index);
  39. .
  40.     if not FActContinue then
  41.       TryConnect;
  42.     if not FActContinue then Exit;
  43.   end;
  44. .
  45.   if NotDesigning and (Index in [ngbInsert, ngbEdit, ngbCancel, ngbPost, ngbDelete]) then
  46.     SetEnabledCtrlsAndFocus;
  47. .
  48.   ActiveChanged;
  49. //===============================================================
  50.   if NotDesigning and Assigned(FOnAfterChange) then
  51.   begin
  52.     ///  Finalizácia celej akcie
  53.     ///  Zápis súvisiacich záznamov
  54.       ///  Tu je k dispozícii nový PK hlavného záznamu
  55.     ///  Dodatočné nastavenie tlačidiel navigátora
  56.     ///  Pri post aktualizácia FVirtualTree
  57.     FOnAfterChange(Self, Index);
  58.     if not FActContinue then Exit;
  59.   end;
  60. .
  61.   if (FOriginalState = dsInsert) and (Index = ngbPost) and FAutoInsert then
  62.     BtnClick(ngbInsert);
  63. end;
Ďakujem
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.