Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Débutant
Débutant Pour bien débuter avec Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 12/11/2010, 12h28   #101
TryExceptEnd
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 363
Points : 363
Pour les raccourcis clavier : http://olance.developpez.com/article...accourcis-ide/
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2010, 18h53   #102
mick605
Membre Expert
 
Homme
Étudiant
Inscription : juin 2009
Messages : 936
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2009
Messages : 936
Points : 1 835
Points : 1 835
Cool

Dommage que certains de ces raccourcis ne soient pas disponibles dans la version personnelle .... Je pense principalement au Ctrl+Shift+C qui a l'air super utile !!
mick605 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 19h47   #103
Droïde Système7
Membre Expert
 
Avatar de Droïde Système7
 
Homme
Inscription : septembre 2003
Messages : 1 896
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 1 896
Points : 1 665
Points : 1 665


Ça faisait longtemps que je n'avais eu l'occasion, à chatouiller du code en rapport avec la gestion des exceptions.

Hé oui en général, dès que l'on s'approche de près où de loin vers ces méthodes, c'est que ça devient chaud quelque part.

J'ai donc ajouté du code aux bons endroits et testé...

J'ai testé et re testé... mais sans jamais avoir un résultat positif ; comme si tout code ajouté ne servait rigoureusement à rien.

J'ai consulté scrupuleusement des tutos, mais en vain, toujours le même résultat

Au bout de plusieurs heures, si si... j'ai eu comme un flash

Bon sang mais c'est bien sûr !!!

Si ça vous arrive, pensez à moi.

Heuuuuuu, j'oubliais : pensez à tester votre exe hors EDI hein.

Enfin je suis sous D7, peut-être que les choses sont gérées désormais de façon différente sous d'autres versions de Delphi ?
Droïde Système7 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 10h14   #104
Andnotor
Rédacteur/Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 884
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 884
Points : 4 370
Points : 4 370
Et si tu nous disais la différence de comportement constatée en et hors EDI...
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 10h24   #105
Droïde Système7
Membre Expert
 
Avatar de Droïde Système7
 
Homme
Inscription : septembre 2003
Messages : 1 896
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 1 896
Points : 1 665
Points : 1 665
Citation:
Envoyé par Andnotor Voir le message
Et si tu nous disais la différence de comportement constatée en et hors EDI...
Comme inscrit plus haut, j'ose me citer :
Citation:
J'ai testé et re testé... mais sans jamais avoir un résultat positif ; comme si tout code ajouté ne servait rigoureusement à rien.
Comme si tout code ajouté se servait strictement à rien = EDIT en colère avec message genre "Violation d'adresse...".

Autrement dit l'EDI garde la main et détecte le souci en amont du code soulevant l'exception. Donc le code en question ne peut être exécuté.

Mais je suis toujours sous D7, ceci expliquant peut-être cela

Tandis qu'hors EDI, l'exception est effectivement bien gérée, du nickel chrôme quoi
Droïde Système7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 10h56   #106
Linkin
Membre Expert
 
Inscription : août 2002
Messages : 1 074
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : août 2002
Messages : 1 074
Points : 1 287
Points : 1 287
Dans l'EDI, la gestion d'exception est gérée en débugage, encore heureux.

Par contre, il lève l'exception et "arrête" le programme. Il faut acquitter l'exception puis continuer l'exécution.
__________________
Delphi 7
Windows XP/Vista
Linkin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 11h02   #107
Droïde Système7
Membre Expert
 
Avatar de Droïde Système7
 
Homme
Inscription : septembre 2003
Messages : 1 896
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 1 896
Points : 1 665
Points : 1 665
Citation:
Envoyé par Linkin Voir le message
[...]
Par contre, il lève l'exception et "arrête" le programme. Il faut acquitter l'exception puis continuer l'exécution.
Je peux t'assurer que dans mon cas (doit pas être le seul) qu'une fois les F7 passés, ça plante dans l'appli (pas l'EDI) et que le code n'est pas exécuté.

Sinon je ne pense pas que, l'autre fois, j'aurais passé des heures à tourner en rond.
Droïde Système7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 11h30   #108
ouiouioui
Membre Expert
 
Avatar de ouiouioui
 
Homme Alexandre
Administrateur systèmes et réseaux
Inscription : août 2006
Messages : 885
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 31
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : août 2006
Messages : 885
Points : 1 201
Points : 1 201
Envoyer un message via MSN à ouiouioui
Pour ceux qui ne connaisse pas il existe de merveilleux petit addon pour Delphi


Voila ceux que j'utilise :
http://www.gexperts.org/ rajoute des fonctions très utile, celle que j'utilise le plus c'est "components to code" tu pose ton composants sur ta fiche tu le règle et "components to code" te donne le code pour le créer en runtime avec les réglages choisi, il reste plus qu'a supprimer le composants de la fiche.

http://andy.jgknet.de/blog/ IDE Fix Pack qui existe pour Delphi 7, 2007, ... XE
la liste est trop longue aller voir le site, c'est un boost pour le démarrage, la complétition de code, la compilation, la recherche, ...
Je l'utilise depuis Delphi 2007 j'ai jamais eu de souci avec. Le site a d'autre outils sympa.

vidéo de démarrage de mon Delphi avec JVCL, FastReport, DevExpress VCL. 9sec
c'est un redémarrage en fait le 1er démarrage est légèrement plus long.
__________________
Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.
ouiouioui est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 11h32   #109
Andnotor
Rédacteur/Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 884
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 884
Points : 4 370
Points : 4 370
Le bloc d'exception n'est pas traité, soit. Mais qu'est-ce qui devrait générer l'exception ? Utilises-tu un FindWindow par exemple ?

Pourquoi FindWindow ? Simplement parce que la fiche en conception à toute les caractéristiques d'une fiche en exécution. On a l'impression que FindWindow devrait échoué parce que notre fenêtre n'est pas (encore) créée depuis notre exe, mais en fait FindWindow nous renvoi la fiche ouverte dans l'EDI...

Il y a peut être d'autres cas, d'où le besoin dans savoir plus. Dire que le code n'est pas exécuté si lancé depui l'EDI n'est pas suffisant
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 12h08   #110
Droïde Système7
Membre Expert
 
Avatar de Droïde Système7
 
Homme
Inscription : septembre 2003
Messages : 1 896
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 1 896
Points : 1 665
Points : 1 665
Citation:
Envoyé par Andnotor Voir le message
Le bloc d'exception n'est pas traité, soit. Mais qu'est-ce qui devrait générer l'exception ? Utilises-tu un FindWindow par exemple ?

Pourquoi FindWindow ? Simplement parce que la fiche en conception à toute les caractéristiques d'une fiche en exécution. On a l'impression que FindWindow devrait échoué parce que notre fenêtre n'est pas (encore) créée depuis notre exe, mais en fait FindWindow nous renvoi la fiche ouverte dans l'EDI...

Il y a peut être d'autres cas, d'où le besoin dans savoir plus. Dire que le code n'est pas exécuté si lancé depui l'EDI n'est pas suffisant
Le cas traité en soit n'est pas bien méchant, c'est dans l'esprit du titre de ce thread : pour aider les débutants

Voici en gros mon code qui chatouille et provoque...
Code :
1
2
3
4
5
6
7
8
9
10
    TRY
    GetConvert(StrToInt(D));
    EXCEPT
    on EconvertError do
    begin
      //ShowMessage('Ça va péter !');
      WarnCapa10;
      exit;
      end;
    END;
Ensuite plus loin je préserve et assure le code par des : StrToIntDef(...).

ouiouioui, intéressant aussi ton message merci, je vais éplucher ça. Par la même ça en aidera certainement plus d'un.
Droïde Système7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2011, 23h19   #111
Caribensila
Membre expérimenté
 
Avatar de Caribensila
 
Homme PIERRE-LUC REAUD
programmateur ( programmeur amateur ;)
Inscription : septembre 2010
Messages : 278
Détails du profil
Informations personnelles :
Nom : Homme PIERRE-LUC REAUD
Âge : 62
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : programmateur ( programmeur amateur ;)
Secteur : Santé

Informations forums :
Inscription : septembre 2010
Messages : 278
Points : 540
Points : 540
Par défaut Optimisation de l'affichage dans les contrôles d'édition

Salut à tous,

Deux petits trucs utiles en conception comme en utilisation :

1) Lorsque l'Application doit afficher un nombre de lignes assez important dans des contrôles comme par exemple le TMemo ou le TListBox, la vitesse d'affichage dépend de la fonte choisie. Par exemple, MS Sans Serif s'affiche 4 fois plus vite que Times New Roman.

2) Heureusement, il n'est pas nécessaire de s'imposer certaines fontes plutôt que d'autres. Il suffit d'encadrer le code d'affichage par BeginUpdate et EndUpdate (contrôles utilisant TStrings).

EXEMPLE :
Code :
1
2
3
4
Memo1.Lines.BeginUpdate;
try
  {[code d'affichage]}
finally  Memo1.Lines.EndUpdate;  end;

Valeurs relevées avec un test d'affichage de 400 lignes dans un TMemo (D7):
- Times New Roman => 4s.
- MS Sans Serif => 1s.
- Avec BeginUpdate/EndUpdate (pour les deux fontes ci-dessus) => 0,05 s (!)
Caribensila est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 22h35   #112
CapJack
Membre émérite
 
Avatar de CapJack
 
Homme
Prof, développeur amateur vaguement éclairé...
Inscription : mars 2004
Messages : 623
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Prof, développeur amateur vaguement éclairé...
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 623
Points : 973
Points : 973
Par défaut Trukzenvrak

Avec Outils/Configurer les outils/Ajouter...





(testé avec Delphi 2009 sous Win 7).

Créeront deux outils ouvrant un explorateur de fichiers, le premier dans le répertoire du fichier sélectionné dans l'éditeur, le deuxième dans le répertoire cible du projet. Explo électronique, toujours pratique.



Déterminer la taille d'un fichier en toutes circonstances, même s'il est ouvert dans une autre application :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function DTFileSize
        (
        const APath             : string
        ) : Int64;
 var S : TFileStream;
 begin
  Result := 0;
  if not(FileExists(APath)) then exit;
  S := nil;
  try
   S := TFileStream.Create( ExpandFileName( APath ),
                            fmOpenRead or fmShareDenyNone );
   Result := S.Size;
  finally
   if assigned(S) then S.Free;
  end;
 end;



Résoudre le problème du warning "Char in SetOfChar" sous Delphi 2009 et +, en conservant un code universel :

Se compile sous toutes les versions de Delphi, Ansi ou Unicode, et paf ! le warning.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
        {$IFDEF UNICODE}
        SetOfChar = TSysCharSet;
        {$ELSE}
        SetOfChar = set of Char;
        {$ENDIF UNICODE}
 
Function  DTCharInSet(C:Char;const CharSet:SetOfChar):Boolean;
 begin
  {$IFDEF UNICODE}
  Result := CharInSet(C,CharSet)
  {$ELSE}
  Result := C in CharSet
  {$ENDIF UNICODE}
 end;
CapJack est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/09/2011, 08h12   #113
CapJack
Membre émérite
 
Avatar de CapJack
 
Homme
Prof, développeur amateur vaguement éclairé...
Inscription : mars 2004
Messages : 623
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Prof, développeur amateur vaguement éclairé...
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 623
Points : 973
Points : 973
Spécial Delphi XE2

Il n'y a pas de directive pour savoir si on est dans un "contexte VCL" ou dans un "contexte FMX", ce qui est logique puisque cette notion n'a pas de sens : en effet il est possible d'avoir au sein de la même application des fiches VCL et des fiches FMX (même si cela est déconseillé par Embarcadero).

Par contre il est tout à fait possible, dans le cadre d'une procédure opérant sur un composant, ou d'une méthode dudit composant, de savoir si ce composant est sur une fiche FMX ou sur une fiche VCL :

Les fiches VCL dérivent de VCL.Forms.TCustomForm
Les fiches FMX dérivent de FMX.Forms.TCommonCustomForm;

Je vous propose un squelette de code pour un composant non visuel qui aurait besoin de connaître le contexte dans lequel il est instancié, et qui pourrait se compiler sous n'importe quelle version de Delphi (et de Lazarus, avec quelques ajouts simples) :

Code :
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
uses 
  {$IFDEF DCC}
  WinAPI.Windows, System.SysUtils, WinAPI.Messages,
  System.Classes, VCL.Forms, VCL.Dialogs, FMX.Forms;
  {$ELSE}
  Windows, SysUtils, Messages, Classes, Forms, Dialogs;
  {$ENDIF DCC} // C'est juste un exemple
 
...
 
procedure TMyComponent.DoSomethingContextDependent;
 var 
     lO : TComponent;
     {$IFDEF DCC}
     lF : VCL.Forms.TCustomForm;
     lX : FMX.Forms.TCommonCustomForm;
     {$ELSE}
     lF : TCustomForm;
     {$ENDIF DCC}
 
 begin
 
  ...
  {$IFDEF DCC}
 
  lO := lC.Owner;
  while assigned(lO)
    and not (LO is VCL.Forms.TCustomForm)
    and not (lO is FMX.Forms.TCommonCustomForm)
     do lO := lO.Owner;
 
  if (lO is VCL.Forms.TCustomForm)
   then
    begin
     lF := VCL.Forms.TCustomForm(lO);
     // Faire des trucs VCL avec la fiche lF, dans Delphi XE2
    end;
 
  if (lO is FMX.Forms.TCommonCustomForm)
   then
    begin
     lX := FMX.Forms.TCommonCustomForm(lO);
     // Faire des trucs FMX avec la fiche lX, dans Delphi XE2
    end;
 
  {$ELSE}
 
  lO := lC.Owner;
  while  assigned(lO)
     and not (LO is TCustomForm)
     do lO := lO.Owner;
 
  if (lO is TCustomForm)
   then begin
         lF := TCustomForm(lO);
         // Faire des trucs VCL avec la fiche lF, dans Delphi XE ou inférieur
        end;
 
  {$ENDIF DCC}
 
 end;
S'agissant toujours de la FMX et de Windows (uniquement), les handles des composants FMX sont des handles "propriétaire" internes à la FMX, et qui n'ont rien à voir avec les handles de Windows. Mais alors, comment utiliser l'API de Windows si on en a besoin ?

Il existe une fonction pour ça, elle est dans l'unité Fmx.Platform.Win :

Code :
WinHandle := FmxHandleToHWND(lX.Handle);
Je suppose qu'il faut l'utiliser avec prudence, mais il est potentiellement possible alors d'appeler n'importe quelle fonction de WinAPI.Windows en utilisant la valeur renvoyée par cette fonction.

Enjoy!
CapJack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 10h44   #114
Droïde Système7
Membre Expert
 
Avatar de Droïde Système7
 
Homme
Inscription : septembre 2003
Messages : 1 896
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 1 896
Points : 1 665
Points : 1 665
Merci mon capitaine pour ces précieuses infos

Mais... ne pas oublier ni dévier du sujet de ce thread...

En effet, demande à un débutant ce qu'il pense de la réalisation de composants. Sans parler s'il fait le distinguo entre un "contexte VCL" et FMX".

@+
Droïde Système7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 12h29   #115
CapJack
Membre émérite
 
Avatar de CapJack
 
Homme
Prof, développeur amateur vaguement éclairé...
Inscription : mars 2004
Messages : 623
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Prof, développeur amateur vaguement éclairé...
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 623
Points : 973
Points : 973
Hum. Oui. Désolé...

Je m'étais focalisé sur le titre "nos petits trucs utiles..." en oubliant que c'était avant tout destiné aux débutants.

Dont acte.
CapJack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 12h36   #116
Droïde Système7
Membre Expert
 
Avatar de Droïde Système7
 
Homme
Inscription : septembre 2003
Messages : 1 896
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 1 896
Points : 1 665
Points : 1 665
Citation:
Envoyé par CapJack Voir le message
Hum. Oui. Désolé...

Je m'étais focalisé sur le titre "nos petits trucs utiles..." en oubliant que c'était avant tout destiné aux débutants.

Dont acte.
Pas de mal, l'intention était fort louable

En échange ; peux-tu nous donner stp un autre truc plus accessible aux débutants ?

Merci pour eux
Droïde Système7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 18h28   #117
Whiler
Membre chevronné
 
Avatar de Whiler
 
Homme
Inscription : avril 2002
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 298
Points : 618
Points : 618
Envoyer un message via Skype™ à Whiler
Raccourcis clavier : http://docwiki.embarcadero.com/RADSt...ar_d%C3%A9faut

On remarque au passage que la doc est disponible en ligne... (depuis la version D7)

Sinon, je ne peux plus me passer de cnpack, entre autre pour la coloration des indentations...
Pour illustrer :
Whiler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 11h01   #118
dehorter olivier
Membre Expert
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 933
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 933
Points : 1 257
Points : 1 257
Je viens d'essayer, et il y a plein de choses intéressantes

MERCI
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 11h20   #119
Droïde Système7
Membre Expert
 
Avatar de Droïde Système7
 
Homme
Inscription : septembre 2003
Messages : 1 896
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2003
Messages : 1 896
Points : 1 665
Points : 1 665
Citation:
Envoyé par dehorter olivier Voir le message
Je viens d'essayer, et il y a plein de choses intéressantes

MERCI
http://www.cnpack.org/images/cnwizards.gif

Droïde Système7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 14h09   #120
CapJack
Membre émérite
 
Avatar de CapJack
 
Homme
Prof, développeur amateur vaguement éclairé...
Inscription : mars 2004
Messages : 623
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Prof, développeur amateur vaguement éclairé...
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 623
Points : 973
Points : 973
Polymorphisme, static et virtual...

Je ne définirai pas ces termes, des tutoriels bien faits existent pour ça sur developpez.net.

Ce que je propose là n'entre pas dans la catégorie des trucs utiles, mais plutôt des trucs "pédagogiques"... par contre, c'est bien pour les débutants.

Pour la petite histoire, quand j'ai commencé à étudier la programmation objet il y a... enfin voilà, quoi, j'ai beaucoup ramé au début pour comprendre les notions de polymorphisme, d'héritage, tout ça. Avec le recul, j'ai compris que c'était lié au fait que par défaut, les méthodes de Delphi sont déclarées static, donc, par défaut, Delphi ne gère pas le polymorphisme. Ceci pour des raisons techniques de performance qui étaient sans doute valables sous un 486 cadencé à 33 MHz, mais qui ne sont peut-être plus vraiment d'actualité aujourd'hui.

Je trouve que c'est quand on passe une classe ancêtre comme paramètre d'une fonction qu'on comprend de façon limpide ces notions.

Voici une unité, à copier/coller et à sauvegarder sous le nom ExemplePolymorphismeU :

Code :
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
unit ExemplePolymorphismeU;
 
interface
 
type
 TPepe = class
          function QuiJeSuis  : string;virtual;
          function CeQueJAime : string;
         end;
 
 TPapa = class(TPepe)
             function QuiJeSuis  : string;override;
             function CeQueJAime : string;
            end;
 
 TFill = class(TPapa)
             function QuiJeSuis  : string;override;
             function CeQueJAime : string;
            end;
 
 TFils = class(TPapa)
             function QuiJeSuis  : string;override;
             function CeQueJAime : string;
            end;
 
 TTest = class(TFils)
             function QuiJeSuis  : string;override;
            end;
 
implementation
 
function TPepe.QuiJeSuis;
 begin
  Result := 'Je suis l''ancêtre.';
 end;
 
function TPepe.CeQueJAime;
 begin
  Result := 'J''aime les trucs de vieux.'
 end;
 
 
 
function TPapa.QuiJeSuis;
 begin
  Result := 'Je suis le père.';
 end;
 
function TPapa.CeQueJAime;
 begin
  Result := 'J''aime les trucs de papa.'
 end;
 
 
 
function TFils.QuiJeSuis;
 begin
  Result := 'Je suis le fils.';
 end;
 
function TFils.CeQueJAime;
 begin
  Result := 'J''aime les trucs de jeune garçon.'
 end;
 
 
 
function TFill.QuiJeSuis;
 begin
  Result := 'Je suis la fille.';
 end;
 
function TFill.CeQueJAime;
 begin
  Result := 'J''aime les trucs de jeune fille.'
 end;
 
 
 
function TTest.QuiJeSuis;
 begin
  Result := 'Je suis le test.';
 end;
 
end.
Maintenant, créez une nouvelle application VCL, collez sur la fiche principale un TMemo et un TButton, et adaptez-y le code suivant :

Code :
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
unit ExemplePolymorphismeF;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExemplePolymorphismeU, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
    procedure Presentation(Personne:TPepe);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Presentation(Personne:TPepe);
 begin
  Memo1.Lines.Add(Personne.QuiJeSuis);
  Memo1.Lines.Add(Personne.CeQueJAime);
  Memo1.Lines.Add('');
 end;
 
procedure TForm1.Button1Click(Sender: TObject);
var Pepe : TPepe;
    Papa : TPapa;
    Fill : TFill;
    Fils : TFils;
    Test : TTest;
begin
 Pepe := TPepe.Create;
 Papa := TPapa.Create;
 Fill := TFill.Create;
 Fils := TFils.Create;
 Test := TTest.Create;
 
 Presentation(Pepe);
 Presentation(Papa);
 Presentation(Fill);
 Presentation(Fils);
 Presentation(Test);
 
 Test.Free;
 Fils.Free;
 Fill.Free;
 Papa.Free;
 Pepe.Free;
end;
 
end.
Compilez, cliquez... étonnant, non ?

Maintenant, modifiez le code de la première unité en :

Code :
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
 TPepe = class
          function QuiJeSuis  : string;virtual;
          function CeQueJAime : string;virtual;
         end;
 
 TPapa = class(TPepe)
             function QuiJeSuis  : string;override;
             function CeQueJAime : string;override;
            end;
 
 TFill = class(TPapa)
             function QuiJeSuis  : string;override;
             function CeQueJAime : string;override;
            end;
 
 TFils = class(TPapa)
             function QuiJeSuis  : string;override;
             function CeQueJAime : string;override;
            end;
 
 TTest = class(TFils)
             function QuiJeSuis  : string;override;
            end;
Compilez, cliquez... comparez, observez, méditez, comprenez.
CapJack est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h41.


 
 
 
 
Partenaires

Hébergement Web