Créer des composants dynamiquement

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

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.
Rejoignez-nous