Application MDI et sauvegarde

cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 31 août 2006 à 15:23
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 31 août 2006 à 21:49
Bonjour à tous,

Dans mon programme, j'utilise ls système d'application MDI.
Mon problème, c'est que la fiche MDI enfant est créer dynamiquement(créer juste avant de l'afficher), et je ne peux donc pas rajouter une option pour enregistrer le contenu de cette fiche.

En fait, dans cette fiche enfant, j'ai un SynEdit(composant TSynEdit ;)).
Le problème c'est que comme la fiche n'est pas créer à la base directement dans les options du projet, je ne peux pas faire une entrée du style: MDIChild.SynEdit1.SaveToFile(NameOfFile), puisque MDIChild n'est pas créé, il est donc pas reconnu.

Le menu pour enregistrer se trouve sur la fiche principal(la fenêtre parent).
Je voudrais donc savoir comment faire, si quelqu'un avais une idée pour m'aider.

Merci d'avance.

5 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
31 août 2006 à 16:15
salut,

lorsque tu crée ta form, le constructeur te retourne l'instance.

Sauve la dans un tableau ou une var et utilise ta var pour y acceder

principe de base:

type TMainForm = class(TForm)
....
private
MaFormMDI :TMDIForm;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
MaFormMDI := nil;
end;
procedure TMainForm.Formdestroy(Sender: TObject);
begin
MaFormMDI.free; // important !
end;

procedure TMainForm.CreateChild();
begin
if not assigned(MaFormMDI) then
MaFormMDI := TMDIForm.Create(...);
end;

procedure TMainForm.SaveMDI();
begin
if assigned(MaFormMDI) then
MaFormMDI.Save; //methode public de TMDIForm
end;

après, faut voir de ce que tu as besoin.

bon code,
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
31 août 2006 à 17:20
Si tu crée un forme dynamique, tu peux par exemple crée aussi un bouton dynamique dessus contenant la procedure de sauvegarde.
Ton bouton devrait avoir owner := ta fiche mdi.
Dans le OnClick du bouton crée, tu peux alors faire une recherche d'un composant synedit contenu dans la form ou il est lui meme contenu. Il ne te reste plus alors qu'a effectuer ton SaveToFile.
Tu aura besoin des fonctions:
- findcomponent
- is
- as
- componentcount

De tête je dirais une fonction de la forme (à arranger un peu à mon avis):
procedure Button1Click(Sender: TObject);
var
  frm : TmdiForm;
  syn: TSynEdit;
begin
  frm : = (Sender) as TmdiForm;
  for i := 0 to frm.Componencount-1do
  begin
    if frm.component[i] is TSynEdit then
    begin
       syn : = frm.component[i] as TSynEdit;
       syn.SaveToFile;
    end
  end;
end;

A Vérifier !
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
31 août 2006 à 21:28
@CptPingu:


Le prend pas mal, mais c'est un peu boiteux comme solution. Et je voit
pas pourquoi le bouton devrait être crée dynamiquement. (ou alors j'ai
pas bien compris son problème.)


Le plus simple est de publié une methode de sauvegarde et au pire de faire un truc genre:


procedure TMainForm.SaveAllMDI();

var i : integer

begin

  for i:= 0 to mdichildrencount-1 do begin

    if  MDIChild[i] is TMDIForm then

      (MDIChildren as TMDIFOrm).save;

  end;

end;

(syntaxe de tête)


bien sur le nom de fichier peut être passé en paramètre ou lut dans une
proprieté de la MainForm. mais Je vois vraiement pas l'intéret de
parser tout les composants.


A+
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
31 août 2006 à 21:38
Non, le bouton n'est pas obligatoire, je donnais simplement un exemple. Effectivement, ta méthode est plus rapide et moins contraignante. Ma solution est un peu plus généraliste (j'utilisait ceci pas forcement pour des fenêtres MDI).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
31 août 2006 à 21:49
Je vous remerci tous, mon problèmes à été résolu par mon frangin quand il est rentré du boulot(j'ai pas pu venir sur le forum avant).
il me suffit de faire: (ActiveMDIChild as TMDIChild) pour utilisé les propriété de la fiche fille pour enregistrer le contenu de mon SynEdit.

Merci à vous tous pour votre aide.
0
Rejoignez-nous