IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Création de formes en continu


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut Création de formes en continu
    Bonjour à tous,

    marre des calendriers, météo, horloge et puzzle etc...
    j'ai un projet à développer qui consiste à offrir à certains agents (seven 32 ou 64 bits) d'un service, des outils adaptés (beaucoup..)
    à leur activité professionnelle et de loisirs (eh oui..ça évolue de ce côté..)
    une sorte de couteau suisse d'un modèle très particulier.

    ça commence comme ça sous D7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        BPlus: TButton;
        BCroix: TButton;
        procedure BPlusClick(Sender: TObject);
        procedure BCroixClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      f: TForm;
      bt1, bt2: TButton;
     
    const
      ecart = 20;
     
    implementation
     
    {$R *.dfm}
     
    procedure CloseForm;
    begin
      if f <> nil then
        f.Close
      else
        Form1.Close;
    end;
     
    procedure AddForm;
    begin
      f := TForm.Create(Form1);
     
      with Form1 do
      begin
        f.Color := Color;
        f.Left := Left - (Width + ecart);
        f.Height := Height;
        f.Width := Width;
        f.Top := Top;
     
        bt1 := TButton.Create(f);
        bt1.Parent := f;
        bt1.Left := BPlus.Left;
        bt1.Top := BPlus.Top;
        bt1.width := BPlus.width;
        bt1.height := BPlus.height;
        bt1.OnClick := BPlus.OnClick;
     
        bt2 := TButton.Create(f);
        bt2.Parent := f;
        bt2.Left := BCroix.Left;
        bt2.Top := BCroix.Top;
        bt2.width := BCroix.width;
        bt2.height := BCroix.height;
        bt2.OnClick := BCroix.OnClick;
      end;
     
      f.Show;
    end;
     
    procedure TForm1.BPlusClick(Sender: TObject);
    begin
      AddForm;
    end;
     
    procedure TForm1.BCroixClick(Sender: TObject);
    begin
      CloseForm;
    end;
    end.
    je n'ai pas encore mis toutes les instructions.
    les formes seront sans bordures, sans bouton, mais auront des menus sur clic-droit.
    je démarre juste le programme..
    Certains y verront le début du pense-bête de Windows, et ils n'auront pas tort.
    mais la comparaison s'arrête là..
    je souhaiterais pouvoir fermer chaque forme avec son bouton "X".
    la procédure CloseForm ne marche pas bien.
    et je voudrais éviter de nommer chaque fiche créée..

    avez-vous une solution ?

    cantador

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Déjà, à la place de f (TForm), je ferais une liste pour pouvoir manipuler mes fenêtres.
    Là, si tu en crée plus d'une, ton pointeur f ne pointe plus que sur la dernière.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    tout simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.BTPlusClick(Sender: TObject);
    begin
      with TForm1.Create(Self) do
      begin
        Left := Self.Left + 20;
        Show();
      end;
    end;
     
    procedure TForm1.BTCroixClick(Sender: TObject);
    begin
      Close;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut
    @Paul TOTH:

    oui, ça marche bien.
    un petit souci, cependant, si j'en ouvre 5 par exemple.
    et que je ferme la première, elles se ferment toutes en même temps..

    merci Paul TOTH

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par cantador Voir le message
    un petit souci, cependant, si j'en ouvre 5 par exemple.
    et que je ferme la première, elles se ferment toutes en même temps..
    Si la fiche est créée récursivement par l'appel with TForm1.Create(Self) do, la 1° fiche est la "propriétaire ultime" de toutes les autres : sa fermeture et sa libération entraine celles de toutes les autres.

    D'autre part, la 1° fiche créée par Application.CreateForm(TForm1, Form1); est considérée comme la fiche principale de l'application et son pointeur est affecté à Application.MainForm.
    Lorsque cette fiche est fermée, l'application se ferme aussi.

    Il faut donc établir une liste de fiches non fermées et non possédées par une des autres (via TForm1.Create(nil)), il faut alors aussi redéfinir une nouvelle fiche principale (sauf pour la dernière) qui remplacera celle qui va être fermée et ne pas oublier de la libérer...

  6. #6
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut
    @Ph. B.:

    hummmhhh..
    ne pourrait-on pas alors, interdire la fermeture de la première tant que les autres sont présentes
    et permettre sa fermeture quand elle se retrouve seule ?
    ce qui permettrait de conserver la solution de Paul TOTH que je trouve élégante.

    cantador

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Ou alors surcharger l’événement OnClose et mettre action = caHide; (de type en C++ TCloseAction& action)

  8. #8
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Il faut donc établir une liste de fiches non fermées et non possédées par une des autres (via TForm1.Create(nil)), il faut alors aussi redéfinir une nouvelle fiche principale (sauf pour la dernière) qui remplacera celle qui va être fermée et ne pas oublier de la libérer...
    Oups ! trop de Firemonkey en ce moment pour moi.
    MainForm n'est pas affectable en VCL contrairement à FMX, au moins sur des versions récentes de Delphi.

    donc voir si D7 accepte l'affectation de MainForm.

  9. #9
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut Une proposition
    Ci joint un dossier avec un projet. Regardes et poses moi si besoin des questions. Je pense que retravailler cet exemple peut répondre à ton besoin.
    Si j'ai un peu de temps je te le fais.
    exvcl_multiFormAuto.zip

  10. #10
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut
    Ci joint un dossier avec un projet. Regardes et poses moi si besoin des questions. Je pense que retravailler cet exemple peut répondre à ton besoin.
    merci ALWEBER pour cet exemple, mais
    ce n'est pas ce que je veux faire.
    je n'ai pas besoin de créer de formes à l'intérieur d'un panel..

    Si j'ai un peu de temps je te le fais.
    surtout pas..
    j'ai juste besoin d'un petit coup de pouce de démarrage.
    j'adore chercher, même si ça dure et que je sue à grosses gouttes
    c'est ce qui fais le sel de la programmation !
    ne me gâche mon plaisir !
    comme on ne peut jamais tout savoir, et qu'il y a dans ce forum, quelques pointures
    j'aime bien voir comment elles traitent certaines difficultés informatiques..
    ce qui me permet et à d'autres aussi, je pense, d'apprendre.
    toutefois, je conserve ton code dans mes archives au cas où..

    cantador

  11. #11
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par cantador Voir le message
    merci ALWEBER pour cet exemple, mais
    ce n'est pas ce que je veux faire.
    je n'ai pas besoin de créer de formes à l'intérieur d'un panel..
    La solution à ton problème passe par ce genre de traitement. je vais essayer de le mettre en langage non informatique

  12. #12
    Membre éclairé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 572
    Par défaut
    @ALWEBER
    ?
    tu ne sais pas ce que je veux faire exactement,
    d'ailleurs, tout est encore un peu flou dans ma tête sauf le début.
    mais, c'est toujours comme ça et puis lentement le puzzle se met en place..
    et je finis par m'en sortir.

    cantador

  13. #13
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut Proposition
    Citation Envoyé par cantador Voir le message
    @ALWEBER
    tu ne sais pas ce que je veux faire exactement, ...
    Voilà un exemple qui peut être correspond à ce que tu veux faire. L'utilisation des messages Windows permet d'éviter le référencement circulaire des unités.
    L'ordre d'appel des fiches dans le fichier dpr est important.
    Exemple Bloc Note.zip

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2012, 19h48
  2. [Hudson] Création d'une plate-forme d'intégration continue
    Par PoichOU dans le forum Intégration Continue
    Réponses: 4
    Dernier message: 09/09/2011, 11h45
  3. Création d'une table en continu
    Par jmde dans le forum Access
    Réponses: 2
    Dernier message: 31/07/2006, 20h41
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo