Application MDI et sauvegarde

Signaler
Messages postés
259
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2021
-
Messages postés
259
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2021
-
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

Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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,
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
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 !
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
@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+
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
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).
Messages postés
259
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
4 juillet 2021
4
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.