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 :

Delphi sans RAD


Sujet :

Delphi

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut Delphi sans RAD
    Bonjour tout le monde les gens,

    J'aimerais savoir comment faire pour créer une fenêtre avec un bouton et un label, sans utiliser l'outil RAD.
    Un peu comme en C++ avec les librairies SFML,wxWidget, Fltk, etc...
    Je rassure le but étant purement pédagogique..J'ai essayé ce code:

    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
    program FenSimple;
    uses
      Windows, Messages, SysUtils, Variants, Classes,StdCtrls, Graphics, Controls, Forms,
      Dialogs;
     
    //{$R *.res} *)
     
    type
      TForm1 = class(TForm)
      end;
    var
      Form1: TForm;
     
    //implementation
     
    //{$R *.dfm}
     
    begin
    Form1:=TForm.create(Application);
       with Form1 do
         Begin
         BorderStyle:= bsNone;
         Left:= 388;
         Top:= 200;
         width:=352;
         height:=258;
         caption:='Ma Fenetre';
         //Execute;
         //Free;
         //ShowMessage('Hello There!');
         end;
     
      //Application.Initialize;
      Application.CreateForm(TForm, Form1);//, Form1
      Application.Run;
    end.
    Pas de problème à la compilation et le programme se lance. Sauf que les valeurs des propriétés n'étant absolument pas pris en considération, c'est une fenêtre ,par défault, qui s'affiche.

    Une idée? un site? Merci d'avance.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 107
    Par défaut
    Tu vas créer DEUX fenêtres !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1:=TForm.create(Application);
    et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CreateForm(TForm, Form1);
    et tu as créer TForm1 que tu n'utilises pas !


    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut
    Il y a une propriété "Position" qui est par défaut sur poDesigned... or comme tu ne passes pas par l'EDI pour concevoir ta fenêtre, il faut peut-être renseigner cette propriété avec la bonne valeur pour afficher selon tes coordonnées !?

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 107
    Par défaut
    @GoustiFruit, non, pour faire souvent des fenêtres construite à la main, cette propriété n'influe pas !

    poDesigned est la valeur par défaut par ce qu'une instance est initialisé à zéro à sa création ...

    Son Problème, c'est qu'il créé une Form invisible qu'il modifie (manque Show) et créé un seconde Form non modifié qu'il est s'affiche !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Merci de vos explications les amis mais le code précédent c'était du brut de décoffrage à taton, etc....D'onc bien sure beaucoup de n'importe quoi. Comme je ne suis pas un maitre Delphi et que je n'ai pas de référence, j'ai donc jeté sur le papier....!! sur la toile...!non dans un fichier serais plus approprié, une ossature tel que j'ai pu le comprendre avec TP7.
    J'avance tout doucement et ce code fonctionne :

    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
    program FenSimple;
     
    uses
      Windows, Messages, SysUtils, Variants, Classes,StdCtrls, Graphics, Controls, Forms,
      Dialogs;
      (*Unit1 in 'Unit1.pas' {Form1};
     
    //{$R *.res} *)
     
    //uses Forms, Dialogs, SysUtils;
     (* type
      TForm1 = class(TForm)
      //HelloButton : TButton;
      //procedure MyEventHandler(Sender: TObject);
       end; *)
     
     
     
    var
      Form1: TForm;
     
    //implementation
     
    //{$R *.dfm}
     
     
    (*procedure TForm1.MyEventHandler(Sender: TObject);
    begin
       ShowMessage('Hello There!');
    end; *)
     
    procedure creFen;
    begin
    //Form1:=TForm.create(Application); placé ici,c'est la fiche par défault qui est créée
       with Form1 do
         Begin
         //BorderStyle:= bsNone;
         color:=clYellow;
         Left:= 388;
         Top:= 200;
         width:=352;
         height:=258;
         caption:='Ma Fenetre';
         //Execute;
         //Free;
         //ShowMessage('Hello There!');
         //Form1:=TForm.create(Application);Placé ici,çà ne change rien la fiche se crée
         end;
    end;
     
    (*procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
     
    end;*)
     
    begin
      //Application.Initialize;
      Application.CreateForm(TForm, Form1);//, Form1
      creFen;
      Application.Run;
     
    end.
    Je finirais bien par lui mettre un bouton sur la tronche un de ces quatres.....
    Avec un p'tit coup de main...... car je n'arrive pas à comprendre pourquoi, alors que le compilateur ne m'a pas jeté, le programme bug lorsque je dérive la class TFORM avec TForm1.

  6. #6
    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
    utiliser la VCL à la main ne présente pas bcp d'intéret.

    pour ce qui est des autres bibliothèque il faut se tourner vers leur API et éventuellement leur portage Pascal...comme pour GTK par exemple
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Paul TOTH:utiliser la VCL à la main ne présente pas bcp d'intéret.

    Comme je l'ai dis plus haut:"Je rassure le but étant purement pédagogique." et je rajouterais que c'est le propre de l'homme d'essayer de comprendre ce qu'il ignore!!
    Oulà Ou là, j'arrête je vais exploser les deux neurones qui me reste.
    On avance , on avance, on avance..... et voici mon bouton et mon label m'sieur dame :

    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
    program FenSimple;
     
    uses
      Windows, Messages, SysUtils, Variants, Classes,StdCtrls, Graphics, Controls, Forms,
      Dialogs;
      (*Unit1 in 'Unit1.pas' {Form1};
     
    //{$R *.res} *)
     
    //uses Forms, Dialogs, SysUtils;
     
    (*type
      TForm1 = class(TForm)
      HelloButton : TButton;
      procedure MyEventHandler(Sender: TObject);
     
      end;*)
     
    var
      Form1: TForm;
      Button : TButton;
      labelou:Tlabel;
    //implementation
     
    //{$R *.dfm}
     
     
    (*procedure TForm1.MyEventHandler(Sender: TObject);
    begin
       ShowMessage('Hello There!');
    end;*)
    procedure creFen;
    begin
    //Form1:=TForm.create(Application); placé ici,c'est la fiche par défault qui est créée
       with Form1 do
         Begin
         //BorderStyle:= bsNone;
    	color:=clYellow;
         Left:= 388;
         Top:= 200;
         width:=352;
         height:=258;
         caption:='Ma Fenetre';
     
         //Execute;
         //Free;
         //ShowMessage('Hello There!');
         //Form1:=TForm.create(Application);Placé ici,çà ne change rien la fiche se crée
         end;
    end;
     
    procedure bouton;
    begin
       with Button do
         Begin
      button := TButton.Create(Form1); //self a la place de form
      button.Caption := 'Run-time';
      button.Width := 50;
      button.Height := 20;
      button.Top := 50;
      button.Left := 20;
      button.Visible := True;
      button.Parent := Form1; //ajouter aussi ça
     
         end;
    end;
     
    procedure etiquette;
    begin
       with labelou do
       begin
       labelou:=Tlabel.create(Form1);
       labelou.caption:='On avance';
       labelou.Width := 100;//Largeur
       labelou.Height := 60;//hauteur
       labelou.Top := 100;
       labelou.Left := 105;
       labelou.Visible := True;
       labelou.Parent := Form1;
      end;
    end;
    (*procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
     
    end;*)
    begin
     
      //Application.Initialize;
      Application.CreateForm(TForm, Form1);//, Form1
      creFen;
      bouton;
      etiquette;
      Application.Run;
     
    end.
    çà tourne au feuilleton mon histoire là....ben......la suite çà va être d'exploité le click du bouton.

  8. #8
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    A yé. Je l'ai boutonné et labellisé.Il a fallu pour ce faire, prendre la dérivation au niveau de la class Tcomponent et non à partir de la TForm.A partir de TForm je n'arrivais pas à compiler, le OnClick générais une erreur d'identification.Pour moi, et visiblement je ne suis pas le seul,de ce que j'ai lu sur le NET, c'était évident de partir de TForm puisque ce dernier descend de TComponent via TCustomForm,TScrollingWinControl,TWinControl et TControl.Mais non.Donc au cours de mes pérégrinations sur le web, je suis tombé sur le poste d'un forum, qui, n'expliquais pas le pourquoi de la chose, mais par tâtonnement en est arrivé à la conclusion du Tcomponent. Et çà fonctionne. Ceci dis j'avoue n'avoir pas encore tout digérer du pourquoi et du comment.Mais enfin chaque chose en son temps et un temps pour chaque Chose.
    voici le site:
    http://www.daniweb.com/forums/thread145761.html
    Voici mon code :

    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
    program FicheDyna1;
    {$R *.res}//permet d'avoir à minima l'icone delphi
     
    uses  Forms,Messages,Windows,Variants,Dialogs,StdCtrls,Controls,Classes,Graphics,SysUtils;
     
    type
      TmonProjet = class(TComponent)
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      private
        //TmaForm :TForm;
        procedure Button1OnClick(Sender: TObject);
    end;
     
     var
      maForm: TForm;
      //maForm: TmaForm; //Fonctionne pas
      //Button1 : TButton;
      labelou:Tlabel;
     
    constructor TmonProjet.Create(AOwner :TComponent);
    Begin
      //inherited;//Mis ou pas çà compile et çà fonctionne
      //Name:='MonProjet';//Mis ou pas çà compile et çà fonctionne
      with TForm (AOwner)do
      Begin
         //BorderStyle:= bsNone;
         color:=clYellow;
         Left:= 388;
         Top:= 200;
         width:=352;
         height:=258;
         caption:='Ma Fenetre';
      end;
     
      with TButton.Create(maForm) do//maForm,nil ou AOwner çà fonctionne quand même
      Begin
          Parent := TForm(maForm); //Trés important pour rattacher le composant à la Fenêtre
          //OldCreateOrder :=False ;
          Caption := 'Oté';
          Width := 50;
          Height := 20;
          Top := 50;
          Left := 20;
          Visible := True;
          TabOrder:=0;
          TabStop:=False;
          OnClick:=Button1OnClick; //Evenement onclick du bouton
       end;
       with labelou do
       begin
       labelou:=Tlabel.create(nil);
       labelou.caption:='On avance';
       labelou.Width := 100;//Largeur
       labelou.Height := 60;//hauteur
       labelou.Top := 100;
       labelou.Left := 105;
       labelou.Visible := True;
       labelou.Parent := maForm;
      end;
     
    end;
     
     
    destructor TmonProjet.Destroy;
    begin
      inherited;
    end;
     
    procedure TmonProjet.Button1OnClick(Sender: TObject); //
    begin
       ShowMessage('Hello la Terre!');
    end;
     
    begin
      Application.Initialize;
      Application.CreateForm(TForm, maForm);//, Form1
      TmonProjet.Create(maForm);
      //crebout;
      Application.Run;
    end.
    Etant arrivé au bout de ma démarche, par rapport au titre, je met le poste comme résolu.

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bel effort mais personnellement j'aurai plutôt fait comme cela :

    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
    program Project1;
     
    {$R *.res}
     
    uses
      SysUtils, Forms, Graphics, Classes, Controls, StdCtrls, Dialogs;
     
    type
      // classe publiant les évènements à affecter
      TEventRepository = class
      public
       procedure OnButtonClick(Sender: TObject);
      end;
     
    var
      // fiche principale
      ApplForm: TForm;
      // conteneur d'évènements
      ApplEvents: TEventRepository;
     
    { TEventRepository }
     
    // Répond à un clic de bouton (si affecté à un bouton)
    procedure TEventRepository.OnButtonClick(Sender: TObject);
    begin
      ShowMessage('Hello la Terre!');
    end;
     
    // Initialiser la fiche en elle-même
    procedure InitForm(AForm: TForm);
    begin
      with AForm do
      begin
       color := clYellow;
       Left := 388;
       Top := 200;
       width := 352;
       height := 258;
       caption := 'Ma Fenetre';
      end;
    end;
     
    // ajouter un bouton
    function AddButon( AOwner: TComponent; AParent: TWinControl ): TButton;
    begin
      Result := TButton.Create( AOwner );
      Result.Parent := AParent;
      Result.OnClick := ApplEvents.OnButtonClick;
      with Result do
      begin
       Caption := 'Oté';
       Width := 50;
       Height := 20;
       Top := 50;
       Left := 20;
       Visible := True;
       TabOrder := 0;
       TabStop := False;
      end;
    end;
     
    // Ajouter un label
    function AddLabel( AOwner: TComponent; AParent: TWinControl ): TLabel;
    begin
      Result := TLabel.Create( AOwner );
      Result.Parent := AParent;
      with Result do
      begin
       Caption := 'On avance';
       Width := 100;//Largeur
       Height := 60;//hauteur
       Top := 100;
       Left := 105;
       Visible := True;
      end;
    end;
     
    begin
      // Initialisation de l'application visuelle et création de sa fiche principale
      Application.Initialize;
      Application.CreateForm( TForm, ApplForm );
      // création du conteneur d'évènements
      ApplEvents := TEventRepository.Create;
      // design de la fiche
      InitForm( ApplForm );
      AddButon( ApplForm, ApplForm );
      AddLabel( ApplForm, ApplForm );
      // boucle d'exécution du programme
      Application.Run;
      // libérer le conteneur d'évènements
      ApplEvents.Free;
    end.
    Ce qu'il faut comprendre de cette "démonstration" :
    • Les évènements de la VCL sont des pointeurs de méthodes, ce qui implique qu'ils ne peuvent être renseignés que par des méthodes d'objet. D'où la nécessité d'avoir un objet pour contenir ces méthodes (ici c'est le rôle de ma classe TEventRepository)
    • La définition des propriétés et les rattachements d'évènements de la fiche et ses composants se trouvent dans le DFM lorsque l'on utilise le mode conception.
      Le contenu du DFM est ensuite stocké dans la partie ressource de l'exécutable généré (c'est le rôle de l'instruction {$R *.dfm} dans le .pas de la fiche).
      Ensuite à l'exécution, lorsqu'une fiche est créé elle cherche sa définition dans les ressources de l'exécutable pour initialiser ses propriétés. Or ici on ne stocke pas de DFM dans les ressources, du coup quand on essaye de créer une fiche personnalisée dans cette configuration cela plante.


    En tout cas pour moi, cette "démonstration" me prouve surtout qu'utiliser Delphi sans le RAD ben c'est plus du tout RAD justement. Je dirais même que ça me rappelle le Java du temps de mes années d'IUT

  10. #10
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Bel effort mais personnellement j'aurai plutôt fait comme cela :
    Suuu.. Oulà çà fait mal.
    Mais du coup je croyais être sur une piste de compréhension et ton code me renvoi dans les cordes.Je suis entrain de n'embrouiller mes deux neurones. Je reviendrais pour une demande d'explication.......Si je suis toujours vivant.

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    N'hésite pas à demander ce que tu ne comprends pas

  12. #12
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    N'hésite pas à demander ce que tu ne comprends pas
    Salut Aka Guymelef,

    Ok pour ton explication. Je crois que j'ai capté globalement le mécanisme.
    Donc je récapitule. Onclick est une propriétée de type TNotifyEnvent lui même pointeur de méthode.Sauf que, lorsque je cherche dans les unités, je ne trouve pas la déclaration de OnClick comme type TNotifyEnvent. Je n'ai que du FOnClick: TNotifyEvent;dans l'unité controls.pas notamment.
    Donc comment, OnClick se retrouve lié à un FOnClick?
    J'éspère que tu suis mon raisonnement.

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    La propriété en elle-même est déclarée dans la classe TControl de l'unité (controls.pas) en visibilité protégée, elle est ensuite poussée en visibilité publiée dans la classe TForm.

  14. #14
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    La propriété en elle-même est déclarée dans la classe TControl de l'unité (controls.pas) en visibilité protégée, elle est ensuite poussée en visibilité publiée dans la classe TForm.
    ah.....

    Merci quand même.

  15. #15
    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
    Citation Envoyé par Aka Guymelef Voir le message
    Bel effort mais personnellement j'aurai plutôt fait comme cela :
    [...zap...]
    En tout cas pour moi, cette "démonstration" me prouve surtout qu'utiliser Delphi sans le RAD ben c'est plus du tout RAD justement. Je dirais même que ça me rappelle le Java du temps de mes années d'IUT
    bonjour, quelle est l'idée derrière l'EventRepository ?

    tel que ton code est présenté, tous les boutons pointeraient sur la même méthode OnClick...il me parait plus judicieux d'ajouter un paramètre Onclick à la fonction AddButton

    c'est un peu ce que j'ai fait dans ma version WinCE de SIPInside qui se compile aussi bien sous Delphi/Win32 que sous FreePascal/ARM

    exemple :
    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
     
    type
    // ici TWinForm est une classe de base directement dérivée de TObject
    // cette version de SIPInside n'utilise qu'une seule fenêtre sur laquelle on vient
    // afficher des TWinForm (un peu à la façon de TGraphicControl de Delphi)
      TConnexionForm=class(TWinForm)
        Button: TButton;
        Status: TConnexionStatus;
        Info  : WideString;
        constructor Create;
        procedure OnPaint(DC: HDC); override;
        procedure OnClick(Sender: TControl);
        procedure SetStatus(Value: TConnexionStatus; lParam: Integer);
      end;
     
    constructor TConnexionForm.Create;
    begin
    // Font et FontNormal sont des HFont et non des objets TFont :)
      Font := FontNormal;
    // ici je crée un bouton en précisant l'évènement OnClick (celui de TConnexionForm)
      Button := TButton.Create(Self, 10, 150, 80, 15, 'ANNULER', OnClick);
    // sera utilisé lors de OnPaint...
      Info := 'Connexion en cours...';
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  16. #16
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    bonjour, quelle est l'idée derrière l'EventRepository ?

    tel que ton code est présenté, tous les boutons pointeraient sur la même méthode OnClick...il me parait plus judicieux d'ajouter un paramètre Onclick à la fonction AddButton
    Honnêtement il n'y a aucune idée particulière derrière l'utilisation d'une telle classe à part celle de rester au plus proche du test one-shot effectué par alberth. Mais je suis bien d'accord qu'au final tout les boutons auraient la même action et qu'il est évidemment préférable de passer l'évènement en paramètre pour une utilisation plus pérenne.

    Je n'ai pas voulu vraiment pousser la réflexion pour qu'alberth comprenne déjà pourquoi j'ai besoin d'une classe pour encapsuler la réponse à l'évènement (TNotifyEvent) dans un premier temps.

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

Discussions similaires

  1. Delphi XE2 sans RAD Studio
    Par Roland Chastain dans le forum EDI
    Réponses: 6
    Dernier message: 23/10/2012, 19h16
  2. Php + delphi sans Apache
    Par dd16 dans le forum Delphi
    Réponses: 9
    Dernier message: 15/09/2006, 11h51
  3. Base de donnée en Delphi sans leBDE
    Par ethan_decoster dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/01/2006, 20h35
  4. ouverture de fichiers word dans delphi (sans utiliser word)
    Par poussinphp dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 11/07/2005, 14h25

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