[Delhpi >> BCB] Wat wordt dit in BCB?

Pagina: 1
Acties:

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ik kwam het volgende ergens tegen en wilde dit ook gaan doen in C++ Builder, maar ik kan niet de juiste code weten te vinden die hetzelfde doet binnen BCB.
Overriding the CreateParams procedure
When we want to use additional parameters in the creation of the CreateParams structure we need to override the call to CreateParams procedure. (It really is confusing that both the procedure and the record type have the same name.)

In the private part of the form declaration place the next line:

...
private
procedure CreateParams
(var Params: TCreateParams); override;
...


In the implementation section place the function code:

procedure TForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);

{code to alter the CreateParams values}

end;


The first line in the above procedure, inherited CreateParams(Params), should always be included. It is used to call the CreateParams for the TForm class and fill in the default set of parameters.
Ik begrijp wat deze functie doet/ moet doen, maar bij alles wat ik probeer werkt het niet correct, ik denk dat ik het niet juist vertaal. Als ik het goed heb is een procedure in Delphi een void functie, dus zal ik in de private sectie van mijn header file van mijn form
void __fastcall CreateParams(TCreateParams Params);
neer moeten zetten, is dat correct?

In mijn cpp file voeg ik vervolgens het volgende toe: (correct?)
void __fastcall TForm1::CreateParams(TCreateParams Params)
{
}

Alleen wat moet ik met de functie inherited ? Deze kan ik niet vinden in BCB :(

Zoals ik mijn source nu heb geeft de compiler de volgende waarschuwingen:
code:
1
2
3
[C++ Warning] Unit1.h(59): W8022 '_fastcall TForm1::CreateParams(TCreateParams)' hides virtual function '_fastcall TCustomForm::CreateParams(TCreateParams &)'
[C++ Warning] Unit1.h(59): W8022 '_fastcall TForm1::CreateParams(TCreateParams)' hides virtual function '_fastcall TScrollingWinControl::CreateParams(TCreateParams &)'
[C++ Warning] Unit1.h(59): W8022 '_fastcall TForm1::CreateParams(TCreateParams)' hides virtual function '_fastcall TWinControl::CreateParams(TCreateParams &)'

En dat lijkt me ook niet de bedoeling..... Iemand enig idee hoe het wel moet?


Alvast bedankt...

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:46
Met inherited in Delphi geef je aan dat de functie-implementatie van de base-class moet aangeroepen worden.
Je gaat dus de implementatie van die functie in de base class gaan aanroepen.

In C++ doe je dat als volgt:
code:
1
ClasseNaamBaseClass::Functienaam();


In jouw geval is dat dus:
code:
1
TForm::CreateParams (Params);

https://fgheysels.github.io/


  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Dat klinkt wel logisch... Ik heb die code toegevoegd in mijn void __fastcall TForm1::CreateParams(TCreateParams Params) functie, en de compiler grijpt hem, maar ik blijf die warning messages houden... Waar komen die vandaan?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:46
CreateParams is een virtuele functie in je base - class. Die moet je dus overriden in je inherited class. Ik geloof niet dat je in C++ daar een speciaal keyword voor nodig hebt.

Ik zie wel dat, in de base class, die CreateParams een parameter heeft die by reference wordt doorgegeven. Jij moet, in de inherited class die parameter ook by reference doorgeven.

https://fgheysels.github.io/


  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Doe ik dat niet op deze manier dan? Of doe ik iets verkeerd?
En daarnaast, moet ik in de private declaration
void __fastcall CreateParams(TCreateParams Params);
declareren? Of
void __fastcall CreateParams(TCreateParams *Params);
Bedankt voor je hulp trouwens

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:46
Kijk eens in de base-class hoe ze daar gedeclareerd is, en declareer ze op dezelfde manier.

Ik heb hier momenteel BCB niet geinstalleerd.

https://fgheysels.github.io/


  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ik heb gekeken hoe CreateParams was gedeclareerd... Nu heb ik voor mijn functie het volgende gekregen:
in de header:
C++:
1
virtual void __fastcall CreateParams(Controls::TCreateParams &Params);

en in de cpp:
C++:
1
2
3
void __fastcall TForm1::CreateParams(Controls::TCreateParams &Params)
{   TForm::CreateParams(Params);
}


Deze code werkt prima... Bedankt voor de hulp!
Pagina: 1