Results 1 to 4 of 4

Thread: Delphi XE5 - TFormTable

  1. #1

    Question Delphi XE5 - TFormTable

    Ik heb een vraag aangaande TFormTable en Delphi XE5.

    Voorheen had ik geen problemen met het TFormTable component in mijn Delphi (2010) omgeving. Maar omdat we nu naar 64 bit gaan hebben we geupdate naar Delphi XE5. Nu krijg ik bij de crerate van de TFormTable een access vioalation in :

    VCL.Forms:
    Delphi Code:
    1. TCustomForm = class(TScrollingWinControl)
    2.   constructor Create(AOwner: TComponent); override;
    3.  
    4. constructor TCustomForm.Create(AOwner: TComponent);
    5. ......
    6.        try
    7.          if not InitInheritedComponent(Self, TForm) then // gaat mis
    8.           raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
    9.       finally
    10.         Exclude(FFormState, fsCreating);
    11.       end;
    12.  
    13. De code in de create is:
    14.  
    15. TFormTable = class(TActiveForm, IROTable)
    16.   constructor Create(AOwner: TComponent); override;  // declaratie
    17.  
    18. constructor TFormTable.Create(AOwner: TComponent);
    19. begin
    20.   LogConsoleWriteLn('FormTable Create');
    21.   {$IFDEF DEBUGMODE}
    22.   try
    23.   {$ENDIF}
    24.     {$IFDEF DEBUGMODE}
    25.     LogConsoleWriteLn('FormTable Create before inherited');
    26.     {$ENDIF}
    27.     inherited Create(AOwner); // --> gaat mis
    28.     {$IFDEF DEBUGMODE}
    29.     LogConsoleWriteLn('FormTable Create after inherited');
    30.     {$ENDIF}
    31.     //fReflector := TReflectorWindow.Create(ParkingWindow, self);
    32.     //ControlStyle := ControlStyle + [csReflector];
    33.  
    34.     { TODO -oOM -cBUG : Workaround to fix word wrap bux in tabs for longer texts. }
    35. //    aoTabSet.AntiAlias := aaNone;
    36.     {$IFDEF DEBUGMODE}
    37.     LogConsoleWriteLn('FormTable Create sheet');
    38.     {$ENDIF}
    39.     fSheetList := TSheetList.Create();
    40.     fSheetList.GridOwner := self;
    41.     fSheetList.Tabs := self.aoTabSet;
    42.     fSheetList.OnSheetAdd := OnSheetAdd;
    43.     fSheetList.OnSheetDel := OnSheetDel;
    44.     fSheetList.OnSheetActiveChanged := OnSheetActiveChanged;
    45.     fSheetList.OnSheetRename := OnSheetRename;
    46.     fWorkbook := IROTWorkbook(fSheetList);
    47.     //fLocals := nil;
    48.  
    49.     //RegisterDialog; // Register dialog ocx
    50.   {$IFDEF DEBUGMODE}
    51.   except
    52.     on e:exception do
    53.       LogConsoleWriteLn('Exception: FormTable Create <' + e.Message + '>');
    54.   end;
    55.   {$ENDIF}
    56. end;
    57.  
    58. // *********************************************************************//
    59. // Interface: IROTable
    60. // Flags:     (4416) Dual OleAutomation Dispatchable
    61. // GUID:      {297150A9-B93C-4FA9-925D-ECAD064987AF}
    62. // *********************************************************************//
    63. IROTable = interface(IDispatch) // (zelf ontwikkeld)
    Het onderliggende onderdeel is een OCX. En maakt onderdeel uit van groter geheel.

    Ook als ik een nieuwe TFormTable wil toevoegen krijg ik nu een error melding:

    Name:  error.png
Views: 362
Size:  5.9 KB

    Toevoegen van een nieuwe TFormTable aan project (project manager - project - rechtermuisknop - add new- others | inhereted | TFormTable)

    Weet iemand hiervoor een oplossing?

    Extra info:
    Windows 8.1 machine
    Delphi XE5 Update 2
    TMS componenten (waaronder TAdvspreadgrid op TFormTable)
    Last edited by Fvlier; 13-Jul-15 at 14:13. Reason: removed some wrong coding

  2. #2
    Welkom op het forum...

    Het is misschien handig als je je code tussen code-tags plaatst. Voor Delphi-code kun je daar het beste het HighLight-icoontje voor gebruiken (HL). Je kunt je tekst selecteren en dan op HL drukken en kiezen voor Delphi. Je kunt je post nog even wijzigen om dit te doen.

    Ik zie bijvoorbeeld het volgende in jouw code:
    Delphi Code:
    1. inherited Create((AOwner); // --> gaat mis

    Kun jij dit compileren? (Volgens mij heb je daar 2x (( staan)
    Misschien is dit mis gegaan omdat de code niet tussen HIGHLIGHT staat. Maar als dit niet zo is en je hebt die 2x "(" niet in jouw eigen code staan dan is het tweede advies altijd code te knippen en plakken uit je eigen programma zonder hier al te veel in aan te passen. Anders zitten wij te zoeken naar fouten die er misschien niet tussen staan of vinden we fouten die er bij jou helemaal niet in staan.

    En in geval van inheritance-errors is het ook handig om de declaratie van de form (bovenin) te tonen. Misschien dat daar een override of virtual niet goed staat.

  3. #3
    Bedankt RVK voor je tips. Hopelijk is de code zo beter de standaard die hier wordt verwacht.

    Door het zelf testen en onderzoeken is de 2x ( in de code gebleven. Ik had niet meer gecompileerd tussen het knippen naar het forum en de laatste aanpassingen. Ik heb zelf al lopen stoeien met andere parameters zoals create() en create(self) e.d. maar dat leverde ook geen resultaat op.

  4. #4
    Dat ziet er al beter uit, ja

    Ik denk dat je probleem ligt in de volgende regel:

    (in source\vcl\ExtCtrls.pas)
    Delphi Code:
    1. constructor TNotebook.Create(AOwner: TComponent);
    2. begin
    3.   inherited Create(AOwner);
    4.   //.....
    5.   FComponentStyle := ComponentStyle - [csInheritable];
    6.   //.....
    7. end;
    Die - [csInheritable] geeft volgens mij aan dat je het visuale element TNotebook niet kunt inherit'en.

    Maar gebruik je zelf TNotebook???

    Zoja dan moet je die eigenlijk vervangen door TPageControl (want TNotebook is er eigenlijk alleen nog maar voor backward compatibility). Je kunt de tabs eventueel verbergen met TabVisible := false voor elke pagina.


    Als je perse TNotebook wilt blijven gebruiken dan zou je dit kunnen doen: (bron)
    Delphi Code:
    1. unit MyNotebook;
    2. interface
    3.  
    4. uses
    5.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    6.   ExtCtrls;
    7.  
    8. type
    9.   TMyNotebook = class(TNotebook)
    10.   private
    11.     { Déclarations privées }
    12.   protected
    13.     { Déclarations protégées }
    14.   public
    15.     { Déclarations publiques }
    16.     constructor Create(Owner: TComponent); override;
    17.   published
    18.     { Déclarations publiées }
    19.   end;
    20.  
    21. procedure Register;
    22.  
    23. implementation
    24.  
    25. procedure Register;
    26. begin
    27.   RegisterComponents('My controls', [TMyNotebook]);
    28. end;
    29.  
    30. { TMyNotebook }
    31.  
    32. constructor TMyNotebook.Create(Owner: TComponent);
    33. begin
    34.   inherited Create(Owner);
    35.   Include(FComponentStyle, csInheritable);
    36. end;
    37.  
    38. end.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •