2009-10-23 5 views
0

En travaillant avec mon projet de jeu de composants basé sur TFrames, je rencontre plusieurs instances où je souhaite remplacer un composant de TFrame (généralement non visuel) en cours d'exécution par un qui est généré dynamiquement au moment de l'exécution.Référence ou didacticiel pour clarifier la confusion de référence d'objet

Je pense que j'ai probablement trouvé la réponse à mon problème immédiat here, mais dans mon propre creuser et expérimenter avant de trouver cela, il est devenu clair que j'ai beaucoup à apprendre sur la façon dont Delphi gère les références d'objet , en particulier en ce qui concerne les formulaires/cadres, et (en général) les propriétés de classe qui sont des références d'objet plutôt que des valeurs sans pointeur.

Un exemple spécifique d'une expérience est ici:

(sur un formulaire avec trois TButtons)

procedure TForm1.Button3Click(Sender: TObject); 
var 
    MyButton : TButton; 

begin 
    MyButton := TButton.Create(Self); 
    MyButton.Caption := 'New Button'; 
    MyButton.Parent := Form1; 
    Form1.Button2 := MyButton; 
    Form1.Repaint; 
    ShowMessage('Button2 caption = ' + Form1.Button2.Caption); 
end; 

ne remplace pas Bouton2 avec le bouton créé, mais ne montre à la fois sur la forme. Les résultats de ShowMessage indiquent la légende de Button2 still = "Button2"

Je me pose des questions comme, "Est-ce que ce 'non-remplacement' est unique aux formes, ou est-ce que cela serait aussi vrai pour d'autres classes?" En bref, j'ai découvert un autre gouffre de ma propre ignorance. ;-) Je trouve qu'en travaillant avec des références d'objet/d'objet/derefencing/class definitions/class properties etc., il arrive souvent que les choses se comportent exactement comme elles le souhaitent, mais d'autres fois, pas du tout, et même pas près.

Il est clair que j'ai besoin d'étudier dans ce domaine. Plutôt que de question stupide après question stupide après tournant autour de ce sujet, je pensais que je demande ceci:

Qu'est-ce qu'un vraiment bonne référence ou tutoriel pour obtenir une meilleure compréhension sur les distinctions subtiles Re: poignées Delphi de telles choses?

Merci d'avance pour toute votre aide!

+0

Qu'essayez-vous d'accomplir? Comme toutes les langues et les environnements Delphi a sa propre façon de faire les choses. Créer des formulaires dynamiques est vraiment très facile en Delphi, donc si vous expliquez ce que vous essayez d'atteindre, vous pouvez aider –

Répondre

4

Ces champs sur les formulaires sont là purement pour votre commodité lors de l'écriture de code. Vous pouvez les supprimer du fichier .pas et ils apparaîtront toujours. La mise en forme du formulaire est définie dans le DFM et l'objet formulaire contient une liste interne de références aux contrôles placés sur celui-ci, comme tout autre contrôle visuel.

Je ne connais pas les tutoriels sur le sujet, mais je sais comment remplacer un bouton. Vous l'avez surtout bien, mais vous devez également libérer Form1.Button2 avant d'écraser la référence. Cela entraînera le bouton à supprimer lui-même de la liste de contrôle du formulaire dans le cadre de son processus de destruction. Ou, si vous souhaitez enregistrer le bouton quelque part au lieu de le détruire, appelez le Form1.RemoveControl(Button2); à la place.

Questions connexes