Question

Dans l'unité ci-dessous j'ai une variable déclarée dans la section MISE EN ŒUVRE - local à l'unité. J'ai aussi une procédure, a déclaré dans la section TYPE qui prend un argument et attribue cet argument à la variable locale en question. Chaque instance de ce TFrame est transmis une variable unique via passMeTheVar.

Ce que je veux faire est pour chaque instance du cadre pour maintenir sa propre version de cette variable, différente des autres, et l'utiliser pour définir son mode de fonctionnement. Ce qui semble être le cas, cependant, est que toutes les instances utilisent la même valeur, même si je passe explicitement chaque fois une autre variable.

-à-dire:

Unit FlexibleUnit;
interface
uses
//the uses stuff
type
TFlexibleUnit=class(TFrame)
   //declarations including
   procedure makeThisInstanceX(passMeTheVar:integer);
private
//
public
//
end;

implementation
uses //the uses
var myLocalVar;

procedure makeThisInstanceX(passMeTheVar:integer);
begin
myLocalVar:=passMeTheVar;
end;

//other procedures using myLocalVar 
//etc to the 
end;

quelque part dans une autre forme que je l'ai laissé tomber ce cadre sur le volet design, parfois deux de ces cadres sur un formulaire, et l'ont déclaré dans les endroits appropriés, etc. Chacun est unique en ce que:

ThisFlexibleUnit : TFlexibleUnit;
ThatFlexibleUnit : TFlexibleUnit;

et quand je fais:

ThisFlexibleUnit.makeThisInstanceX(var1); //want to behave in way "var1"
ThatFlexibleUnit.makeThisInstanceX(var2); //want to behave in way "var2"

il semble que les deux partagent la même variable "myLocalVar".

Ai-je fait ce mal, en principe? Si cela est la bonne méthode, alors il est une question de débogage ce que j'ai (ce qui est trop énorme pour post) mais si ce n'est pas correcte, en principe, est alors il un moyen de faire ce que je veux dire?

EDIT:

Ok, donc la leçon apprise ici est que la définition de la classe est juste que. De nombreuses classes peuvent aller dans une unité et toutes les instances de toutes les classes de la section Type partager la section de mise en œuvre de l'unité.

Était-ce utile?

La solution

myLocalVar est une variable globale, mais seulement visible à l'intérieur de l'appareil.

Une variable locale serait dans une procédure / fonction, comme

procedure makeThisInstanceX(passMeTheVar: integer);
var
  myLocalVar: Integer;
begin
  myLocalVar := passMeTheVar;
end;

si vous voulez une variable d'instance, qui est chaque cadre a sa propre copie, mettre dans la classe:

type
  TFlexibleUnit = class(TFrame)
     procedure makeThisInstanceX(passMeTheVar:integer);
  private
    myLocalVar: Integer;
  ...
  end;

Autres conseils

Vous appelez la méthode makeThisInstanceX comme méthode de classe (statique) plutôt que de créer une instance de la classe et de l'appeler comme une méthode d'objet. Jetez un oeil à cette référence:

http://oreilly.com/catalog/delphi/chapter/ch02.html

trame / unité / classe / commande

Je salue votre tentative héroïque de mieux le code. Cependant, à en juger par vos questions et commentaires que je regrette de vous informer que votre compréhension est très limitée.

Une trame est pas une unité qui ne soit pas une classe. Un cadre est une classe, mais pas toutes les classes est un cadre. Un cadre est un contrôle mais pas chaque contrôle est un cadre. Les unités ont des sections interface et la mise en œuvre (et l'initialisation et la finalisation). Les classes ont des parties privées et publiques (et protégées et publiées).

Je ne l'ai pas mis le dernier paragraphe pour essayer d'enseigner mais pour vous permettre de jauger votre niveau de compréhension. Un développeur Delphi devrait avoir aucun problème avec le paragraphe. Je ne veux pas vous faire sentir mal ou de montrer - juste essayer d'aider. Peut-être Stack Overflow est pas l'outil pour vous à ce moment.

Comme quelqu'un en train d'apprendre Delphi pour la première fois, je pourrais être confondu par certaines des caractéristiques apparemment redondantes. Mais le produit a une longue histoire et chaque addition était logique au moment où il a été ajouté. Il est également plus facile d'apprendre quand vous ne deviez apprendre un morceau à la fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top