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

  1. #1
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    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
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 663
    Points : 6 949
    Points
    6 949
    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. ___ É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.3.2 Entreprise - Delphi 10.4.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (11.6 - 14.6)

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    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 confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    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 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    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...
    Philippe.

  6. #6
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    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 éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    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 627
    Points : 10 548
    Points
    10 548
    Par défaut
    Ou alors surcharger l’événement OnClose et mettre action = caHide; (de type en C++ TCloseAction& action)

  8. #8
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    Par défaut
    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 ?
    heu, non, désolé, c'est pas bon, car on ne pourrait pas ainsi fermer la première..
    les formes doivent être toutes indépendantes.

    cantador

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par cantador Voir le message
    heu, non, désolé, c'est pas bon, car on ne pourrait pas ainsi fermer la première..
    les formes doivent être toutes indépendantes.

    cantador
    de deux choses l'une, soit il n'y a pas de fiche principale, soit il y en a une et elle ferme l'application.

    pour ne pas avoir de fiche principale, deux solutions:
    1- la cacher (et mettre une icon en SysTray = horloge par exemple)

    2- lancer autant de process que de fenêtre, du coup c'est un ShellExecute() avec en paramètre la position de la nouvelle fenêtre.

    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
     
    uses
      Winapi.ShellAPI;
     
    procedure TForm1.BTPlusClick(Sender: TObject);
    begin
    //  with TForm1.Create(Self) do
    //  begin
    //    Left := Self.Left + 20;
    //    Show();
    //  end;
      ShellExecute(Handle, nil, PChar(Application.ExeName), PChar(IntToStr(Left + 20)), nil, SW_SHOW);
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      if ParamCount = 1 then
        Left := StrToInt(ParamStr(1));
    end;
     
    procedure TForm1.BTCroixClick(Sender: TObject);
    begin
      Close;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    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.
    Philippe.

  11. #11
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    Par défaut
    @Ph. B.

    je suis sous D7 et on peut faire beaucoup de choses encore avec..
    je cogite sur les propositions de Paul TOTH.

    cantador

  12. #12
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    Par défaut
    Comme je n'aime pas le tout cuit, je propose ce code
    en retenant le solution du tray de Paul TOTH qui me plait, car elle permet de construire un menu contextuel offrant plusieurs possibilités.
    l'utilisateur aura s'il le souhaite l'icône de l'appli dans la barre des tâches
    lors de l'installation le programme démarrera dans ce cas avec windows, donc pas de souci..

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    program Project1;
     
    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.ShowMainForm := false;
      Application.Run;
    end.
     
    *********************************************
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Menus, ShellAPI;
     
    const WM_ICONTRAY = WM_USER + 1;
     
    type
      TForm1 = class(TForm)
        BPlus: TButton;
        BCroix: TButton;
        PMTray: TPopupMenu;
        OuvrirForme: TMenuItem;
        MenuItem2: TMenuItem;
        procedure BPlusClick(Sender: TObject);
        procedure BCroixClick(Sender: TObject);
        procedure OuvrirFormeClick(Sender: TObject);
        procedure MenuItem2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        TrayIconData: TNotifyIconData;
        procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      f: TForm;
      bt1, bt2: TButton;
      CreateP: boolean;
    const
      ecart = 20;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.TrayMessage(var Msg: TMessage);
    var
      p: TPoint;
    begin
      case Msg.lParam of
        WM_LBUTTONDOWN, WM_RBUTTONDOWN:
          begin
            SetForegroundWindow(Handle);
            GetCursorPos(p);
            PMTray.Popup(p.x, p.y);
            PostMessage(Handle, WM_NULL, 0, 0);
          end;
      end;
    end;
     
    procedure TForm1.BPlusClick(Sender: TObject);
    begin
      with TForm1.Create(Self) do
      begin
        Left := Self.Left + 20;
        Show;
      end;
    end;
     
    procedure TForm1.BCroixClick(Sender: TObject);
    begin
      Close;
    end;
     
    procedure TForm1.OuvrirFormeClick(Sender: TObject);
    begin
      BPlusClick(Sender);
    end;
     
    procedure TForm1.MenuItem2Click(Sender: TObject);
    begin
      Close;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      if CreateP then exit;   // pour ne pas recréer l'icone
      with TrayIconData do
      begin
        cbSize := SizeOf(TrayIconData);
        Wnd := Handle;
        uID := 0;
        uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
        uCallbackMessage := WM_ICONTRAY;
        hIcon := Application.Icon.Handle;
        StrPCopy(szTip, Application.Title);
      end;
      Shell_NotifyIcon(NIM_ADD, @TrayIconData);
     
      CreateP := true; // la forme principale est créée
    end;
    end.
    la soluce pour ne créer qu'un icône n'est pas top..mais ça marche.
    je ne peux pas non plus utiliser le OnShow puisque la forme principale est invisible...

    qu'en pensez-vous ?

    cantador

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    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

  14. #14
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    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

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    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

  16. #16
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    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

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    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

  18. #18
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    Par défaut
    @ALWEBER
    oui, c'est la solution proposée par Ph. B.
    qui oblige à gérer une liste de formes..
    avec une erreur abstraite sur :

    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
     
    procedure TForm1.Fermeture(var MSG: TMessage);
    var
      aForm: Tform2;
      i1: Integer;
      st1: string;
    begin
    //  try
        aForm := Pointer(MSG.LParam);
        st1 := '$' + intToHex(Integer(Pointer(aForm)), 8);
        i1 := Sl1.IndexOf(st1);
        if i1 >= 0 then
        begin
          aForm.free;
          Sl1.Delete(i1);
        end;
        if sl1.Count = 0 then
          application.Terminate;
    //  except
    //  end;
    end;
    va falloir choisir..

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    Billets dans le blog
    10
    Par défaut Erreur abstraite
    Citation Envoyé par cantador Voir le message
    @ALWEBER
    oui, c'est la solution proposée par Ph. B.
    qui oblige à gérer une liste de formes..
    avec une erreur abstraite ...
    Dans cet exemple je n'ai géré la fermeture de la fiche que par le bouton close. Si tu veux gérer aussi la fermeture par le bouton de fermeture habituel il faut rajouter 7 ou 8 lignes de code.
    Si tu m'indiques la séquence que tu joues quand se produit l'erreur abstraite je peux adapter le programme

  20. #20
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    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 : 569
    Points : 484
    Points
    484
    Par défaut
    Si tu veux gérer aussi la fermeture par le bouton de fermeture habituel il faut rajouter 7 ou 8 lignes de code.
    non, non, il s'agit bien d'une erreur qui se produit sur le bouton fermer créé.
    dans le projet final, il n'y aura d'ailleurs plus de bordures, et donc plus de boutons (fermer, agrandir , réduire)

    je me demande si je ne vais faire un mix des deux idées..

    @+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2012, 20h48
  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, 12h45
  3. Création d'une table en continu
    Par jmde dans le forum Access
    Réponses: 2
    Dernier message: 31/07/2006, 21h41
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h04

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