CodeS-SourceS
Rechercher un code, un tuto, une réponse

Créer des composants dynamiquement

Avril 2017

Comment puis-je créer dynamiquement


des pages dans un tpagecontrol ?


Créer un nouveau projet,


Première étape: Enregistrer la classe TTabsheet


registerclasses([TTabSheet * );


Deuxièmement: Mettre un composant


tpagecontrol sur la fiche principale, créer


une nouvelle page dans le tpagecontrol et mettez


les composants souhaités dans cette page.


Troisièmement: Créer le fichier


de ressources contenant la page qui sera


affichée à l'exécution.


Suivez les instructions ci-dessous


Vous devez changer la propriété parent


des composants que vous avez sur la page à


afficher dynamiquement. Ici, "Self" est la fiche


principale.


var i:integer; c:Tcomponent;


begin


for i := 0 to tabsheet1.Controlcount - 1 do


begin


c := tabsheet1.Controls[i * ;


Self.RemoveComponent(c);


tabsheet1.InsertComponent(c);


end;


saveToStream(Sender);


end;


Quatrièmement, vous devez enregistrer


la page dans un fichier.


procedure TForm1.SaveToStream(Sender: TObject);


var


AStream: TMemoryStream;


begin


if SaveDialog1.execute then


begin


//GuiToObject;


AStream := TMemoryStream.Create;


try


AStream.WriteComponent(tabsheet1);


AStream.SaveToFile(SaveDialog1.FileName);


finally


AStream.free;


end;


end;


end;


Vous devez mettre ce fichier dans un fichier


de resource. Créer un nouveau fichier.


Appelez-le Tabsheet.rc


MyTabSheet RCDATA "NomFichierEtape4"


Run this command


brcc32 tabsheet.rc


Vous obtenez "tabsheet.res"


Enregistrez le projet si vous le souhaitez.


Vous êtes; prêt à créer


des pages dynamiques dans votre application.


Cinquièmement, vous enregistrez la classe TPageControl


et la classe des composantes que vous avez


placez dans votre page


RegisterClasses([TTabSheet * );


RegisterClasses([TListView * );


//Si vous avez mis un tlistview


Donc, pour créer une page dans


un Tpagecontrol, vous appelez la fonction


OpenNewTab with comme premier paramètre


"MyTabSheet"


uses classes, windows;


function OpenNewTab(resourcename:string;


pagecontrol:TPageControl;


sheetcaption:string):TTabSheet;


//retourne une page (TTabsheet)


var


ms: TMemoryStream;


sheet: TTabSheet;





begin


sheet:=nil;


ms := TMemoryStream.Create;


try


GetResourceInStream(resourcename,ms);


sheet := ms.ReadComponent(nil) as TTabsheet;


sheet.Pagecontrol := pagecontrol;


//Vous attachez la page au TPagecontrol


sheet.Caption := sheetcaption;


//Vous lui donnez un titre


sheet.TabVisible:=true;


finally


ms.free


end;


result:=sheet;


end;


function GetResourceInStream(resourcename:string;


stream:TMemoryStream):boolean;


var


ResHandle : THandle;


MemHandle : THandle;


ResPtr : PByte;


ResSize : Longint;


begin


ResHandle := FindResource(0,


PAnsiChar(resourcename),RT_RCDATA);


MemHandle := LoadResource(Hinstance, ResHandle);


ResPtr := LockResource(MemHandle);


ResSize := SizeOfResource(Hinstance, ResHandle);


stream.SetSize(ResSize);


stream.Write(ResPtr^, ResSize);


FreeResource(MemHandle);


stream.position:=0;


end;


N.B : Si vous voulez fermer une page, vous devez mettre la propriété parent à nil avant d'appeler la méthode "free" ou vous aurez des violations d'accès

Adresse d'origine

A voir également

Publié par cs_germainm.
Ce document intitulé «  Créer des composants dynamiquement  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
La protection des logiciels via un composant tpassword, tgetpassword
Tactiques d'optimisation de la vitesse d'execution du code