Pregunta

En la unidad de abajo tengo una variable declarada en la sección APLICACIÓN - local a la unidad. También tengo un procedimiento, declarada en la sección tipo que toma un argumento y cesionarios que el argumento de la variable local de que se trate. Cada instancia de este TFrame se pasa a través de una variable única passMeTheVar.

Lo que yo quiero que haga es para cada instancia de la trama para mantener su propia versión de esa variable, diferente de los demás, y la usará para definir la forma en que opera. Lo que parece estar sucediendo, sin embargo, es que todas las instancias usan el mismo valor, incluso si paso explícitamente cada instancia de una variable diferente.

es decir:

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;

Ahora en algún lugar de otra forma I he caído este marco en el panel de diseño, a veces dos de estas tablas de un formulario, y lo han declarado en los lugares adecuados, etc. Cada uno es único, ya que:

ThisFlexibleUnit : TFlexibleUnit;
ThatFlexibleUnit : TFlexibleUnit;

y cuando lo haga a:

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

parece que ambos comparten la misma variable "myLocalVar".

¿Lo estoy haciendo mal, en principio? Si este es el método correcto, entonces es una cuestión de depurar lo que tengo (que es demasiado grande como para post) pero si esto no es correcto, en principio, a continuación, hay una manera de hacer lo que estoy sugiriendo?

EDIT:

Ok, por lo que la lección aprendida aquí es que la definición de clase es sólo eso. Muchas clases pueden ir en una unidad y todas las instancias de todas las clases en la sección Type compartir la sección de implementación de la unidad.

¿Fue útil?

Solución

myLocalVar es una variable global, pero sólo visible dentro de la unidad.

Una variable local sería en un procedimiento / función, como

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

si desea una variable de instancia, que es cada cuadro tiene su propia copia, lo puso en la clase:

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

Otros consejos

Está llamando el método makeThisInstanceX como un método de clase (estática) en lugar de crear una instancia de la clase y decir que es como un método de objeto. Echar un vistazo a esta referencia:

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

marco / unidad / clase / de control

Aplaudo su heroico intento de mejorar el código. Sin embargo, a juzgar por sus preguntas y comentarios Lamento informarle que su comprensión es muy limitada.

Un marco no es una unidad que no es una clase. Una trama es una clase, pero no todas las clases es un marco. Un marco es un control, pero no todos de control es un marco. Las unidades tienen interfaz y la implementación secciones (e inicialización y finalización). Las clases tienen partes privadas y públicas (y protegidas y publicados).

No puse el último párrafo de tratar de enseñar, sino que le permite medir su nivel de comprensión. Un desarrollador de Delphi debería tener ningún problema con el párrafo. No estoy tratando de hacer que se sienta mal o para mostrar - tratando de ayudar. Tal vez desbordamiento de la pila no es la herramienta adecuada para usted en este momento.

Como alguien acaba de aprender Delphi, por primera vez, podría ser confundido por algunas de las características aparentemente redundante. Sin embargo, el producto tiene una larga historia y de cada adición tenía sentido en el momento en que se añadió. También fue fácil aprender cuando sólo tenía que aprender una pieza a la vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top