Frage

In der Einheit unter ich eine Variable deklariert im Implementationsabschnitt haben - lokal auf dem Gerät. Ich habe auch ein Verfahren, in dem TYPE-Abschnitt deklariert, die auf die lokale Variable in Frage, dass Argument ein Argument und Abtretungsempfänger nimmt. Jede Instanz dieser TFrame wird eine eindeutige Variable über passMeTheVar übergeben.

Was ich will es für jede Instanz des Rahmens zu tun ist, seine eigene Version dieser Variablen zu halten, von den anderen unterscheiden, und das verwenden, um festzulegen, wie es funktioniert. Was scheint jedoch zu geschehen, ist, dass alle Instanzen des gleichen Wert verwenden, auch wenn ich explizit jede Instanz eine andere Variable übergeben.

ie:

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;

Nun irgendwo in einer anderen Form Ich habe ließ dieses Bild Feld auf die Design-Fenster, manchmal zwei diesen Rahmen auf einem Formular, und haben erklärt, sie an der richtigen Stelle, usw. Jeder ist einzigartig, dass:

ThisFlexibleUnit : TFlexibleUnit;
ThatFlexibleUnit : TFlexibleUnit;

und wenn ich ein:

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

es scheint, dass sie beide die gleiche Variable "myLocalVar".

Bin ich tun dies falsch im Prinzip? Ist dies die richtige Methode ist, dann ist es eine Frage des Debugging, was ich habe (die Post zu groß ist), aber wenn dies prinzipiell nicht korrekt ist, dann ist es eine Möglichkeit, zu tun, was ich vorschlage?

EDIT:

Ok, also die Lehre hier gelernt habe, ist, dass die Klassendefinition ist genau das. Viele Klassen können in einem Gerät gehen und alle Instanzen aller Klassen im Type Abschnitt des Implementationsabschnitt der Einheit teilen.

War es hilfreich?

Lösung

myLocalVar ist eine globale Variable, aber nur sichtbar innerhalb der Einheit.

Eine lokale Variable in einer Prozedur / Funktion sein würde, wie

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

Wenn Sie eine Instanz Variable wollen, ist jeder Rahmen seine eigene Kopie hat, steckte es in die Klasse:

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

Andere Tipps

Sie rufen die makeThisInstanceX Methode als Klasse (statisch) Methode, anstatt eine Instanz der Klasse erstellen und es als Objekt Methode aufrufen. Werfen Sie einen Blick auf diese Referenz:

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

Rahmen / Einheit / Klasse / control

Ich begrüße Ihre heroischen Versuch, besser den Code. Allerdings, indem Sie Ihre Fragen und Kommentare zu urteilen Leider muss ich Ihnen mitteilen, dass Ihr Verständnis ist sehr begrenzt.

Ein Rahmen ist nicht eine Einheit, die keine Klasse. Ein Rahmen ist eine Klasse, aber nicht jede Klasse ist ein Rahmen. Ein Rahmen ist eine Kontrolle, aber nicht jede Kontrolle ist ein Rahmen. Einheiten haben Schnittstelle und Implementierung (und Initialisierung und Finalisierung) Abschnitte. Klassen haben private und öffentliche (und geschützt und veröffentlicht) Teile.

Ich habe setze den letzten Absatz nicht in zu lehren, versuchen aber, damit Sie Ihr Verständnis Ebene messen. Ein Delphi-Entwickler soll kein Problem mit dem Absatz haben. Ich versuche nicht, sich schlecht zu fühlen oder zu zeigen - nur versucht zu helfen. Vielleicht Stack-Überlauf ist nicht das richtige Werkzeug für Sie zu diesem Zeitpunkt.

Als jemand nur Delphi zum ersten Mal lernen, könnte ich durch einige der scheinbar redundanten Funktionen verwechselt werden. Aber das Produkt hat eine lange Geschichte, und jeder Zusatz sinnvoll zu der Zeit hinzugefügt wurde. Es war auch leichter zu erlernen, wenn Sie es nur zu einer Zeit, ein Stück zu lernen hatte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top