cs_christophedlr
Messages postés267Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention23 août 2023
-
16 nov. 2008 à 15:21
cs_christophedlr
Messages postés267Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention23 août 2023
-
17 nov. 2008 à 16:45
Bonjour,
Je suis entrain de faire un éditeur de texte avec une gestion de chaque fichier dans un TTabSheet (mis dans un TPageControl).
Dans le TTabSheet, il y a un TMemo.
Je voudrais savoir comment faire pour pouvoir supprimer les deux.
Je m'explique, imaginons deux fichiers : test.html et test.php
Je supprime le premier à gauche qui est test.html, je voudrais pouvoir ensuite supprimer test.php (le TTabSheet) sachant que je les crée dynamiquement dans un tableau.
Là actuellement j'ai tenté avec un Pagecontrol1.ActiveIndex, mais dans ce cas là, le second pas supprimable vu qu'il aura le numéro 0, donc pour supprimer dans mon tableau de TTabSheet ça va foirer.
cs_christophedlr
Messages postés267Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention23 août 20235 16 nov. 2008 à 19:12
Aucun soucis (dsl d'avoir pas filer du code avant), voici ma fonction qui crée un TSynMemo (basé sur un TMemo mais gérant la coloration syntaxique) et créer un TTabSheet, le TSynMemo comme enfant du TTabSheet et le TTabSheet comme enfant du TPageControl :
procedure TForm1.CreateTab(InfosFile: TNewFile);
var
NameFile: String;
begin
NameFile := InfosFile.NameFile+InfosFile.ExtensionFile;
{Alloue un espace supplémentaire dans chaque tableau}
SetLength(TabSheet, FilesLoaded+1);
SetLength(TextFile, FilesLoaded+1);
{Création de l'onglet}
TabSheet[FilesLoaded] := TTabSheet.Create(PageControl1); //Crée l'onglet
{Indique à quel PageControl il appartient}
TabSheet[FilesLoaded].PageControl := PageControl1;
TabSheet[FilesLoaded].Caption := NameFile; //Définit le nom de l'onglet
TabSheet[FilesLoaded].Tag := FilesLoaded;
TabSheet[FilesLoaded].Show; //L'affiche
{Création du champ texte avec coloration syntaxique}
TextFile[FilesLoaded] := TSynMemo.Create(TabSheet[FilesLoaded]);
TextFile[FilesLoaded].Parent := TabSheet[FilesLoaded]; //Indique le composant parent
TextFile[FilesLoaded].Align := AlClient; //Indique l'alignement
TextFile[FilesLoaded].Lines.Clear; //Vide le contrôle
TextFile[FilesLoaded].Gutter.ShowLineNumbers := True; //Affiche le numéro des lignes
TextFile[FilesLoaded].WantTabs := True;
TextFile[FilesLoaded].TabWidth := 4;
TextFile[FilesLoaded].Options := [eoAutoIndent,eoDragDropEditing,eoGroupUndo,
eoShowScrollHint,eoSmartTabDelete,eoSmartTabs,eoTabsToSpaces,
eoTrimTrailingSpaces];
TextFile[FilesLoaded].Show; //L'affiche
if (InfosFile.TypeFile = 'HTML') then TypeHTML(InfosFile);
if (InfosFile.TypeFile = 'PHP') then TypePHP(InfosFile);
if (InfosFile.TypeFile = 'CSS') then TypeCSS(InfosFile);
if (InfosFile.TypeFile = 'SQL') then TypeSQL(InfosFile);
Inc(FilesLoaded); //Ajoute un nouveau fichier chargé/créer
end;
Les quelques fonctions appelé à la fin sont pas importantes, elle permettent juste d'indiquer des informations de base dans le Text du TSynMemo suivant le type de fichier.
J'ai donc au final un ensemble de TTabSheet et je désire pouvoir par exemple fermer le premier qui est donc détruit et pouvoir faire pareil sur le suivant.
Voici le code que j'ai tenté d'écrire et qui fonctionne pas :
procedure TForm1.Fermer1Click(Sender: TObject);
begin
TextFile[PageControl1.Tag].Free;
TabSheet[PageControl1.Tag].Free;
end;
procedure TForm1.PageControl1Change(Sender: TObject);
begin
PageControl1.Tag := TabSheet[PageControl1.ActivePageIndex].Tag;
end;
Merci pour ton aide.
P.S. : Pas d'explication sur ma manière de faire, car c'est totale pourris et pas fonctionel, j'ai juste chercher à faire fonctionner un peu au hasard finalement ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_christophedlr
Messages postés267Date d'inscriptionsamedi 3 janvier 2004StatutMembreDernière intervention23 août 20235 16 nov. 2008 à 23:05
Dans la mesure du possible non, mais si j'ai pas le choix je le ferais, mais cela fera prendre énormément de mémoire, surtout si cache un onglet et que plus tard j'en ouvre un autre qui est identique, je bouffe de la RAM en connerie.