Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉER DES COMPOSANTS DYNAMIQUEMENT


Information sur le tutorial

Catégorie :Composants Date de création : 04/09/2007 16:59:24 Vu : 4 686 fois

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Ce tutorial donne comme example la création d'onglets dans un composant tpagecontrol. Cet example est assez complet, puisqu'il vous montre comment mettre du contenu dans l'onglet et comment détruire celui-ci correctement.

Tutorial

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

04 septembre 2007 17:39:34 :
nouveau format docx
signaler à un administrateur
Commentaire de Mowglinaute le 05/12/2007 15:18:04

C'est bien.
Voilà, bonne programmation.

Dr. Joseph LOMBET

signaler à un administrateur
Commentaire de Brunch le 23/01/2008 18:31:12

Excellent, merci, je cherchais quelque chose comme cela.
Brunch

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,016 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.