Autor Beitrag
Einsamer Schütze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

XP Prof
Delphi 2007 professional
BeitragVerfasst: So 05.11.06 23:06 
Hallo Entwickler,
ich hätte da gern mal folgendes Problem:
Habe eine Anzahl von Integers, die ich in ein dynamisches Array speichere. Dann geht es aus dem Formular weiter in das nächste Formular, wo ich das Array für eine Berechnung benötige.
Frage: am liebsten würde ich das über eine neue Eigenschaft des aufgerufenen Formulars machen, weiß aber nicht, wie ich meine Werte dort in das Array reinbekomme - wie geht das?
Danke im Voraus

ES
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mo 06.11.06 10:34 
Hi
Es sind zwar schon oft die Fragen beantwortet worden, wie bekomme ich die Daten aus einem anderen Formular.Trotzdem, noch einmal eine Erklärung.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Type 
    MyForm1 = Class(TForm)                               // Formular 1
     // hier stehen irgendwelche Variablen und Objecte
     // sowie Ereignisproceduren
     Private
        .....  // nur für MyForm1 nutzbar

     Public
       MyVariable  : irgendwas... // das ist nutzbar
       ....
       ....
     end;


Var
    MyForm1 : TForm;
    MyVariable  : irgendwas...
  .....

gut, nun wird in einem weiteren Formular er Wert gebraucht. Ich weise einmal Test in der FormCreate Procedure den Wert aus MyVariable aus Form1 zu.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Procedure TMyForm2.Create( sender : TObject);
var   test  : irgendwas
 
Begin 
  Test:=MyForm1.MyVariable;  // beachte Kommentar
  .....
end;


Kommentar:
Hier wird der Compiler anfragen, ob er MyForm1 referenzieren soll. Das beantwortest du mit ja und die Unit, in welcher MyForm1 deklariert ist, wird in die Uses-Liste im Implementierungsteil eingebunden.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
Einsamer Schütze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

XP Prof
Delphi 2007 professional
BeitragVerfasst: Mo 06.11.06 16:01 
Hallo und danke erst einmal. Dass ich eine Variable deklarieren kann ist mir bewusst, ich habe mir die diesbezüglichen Postings auch durchgelesen, um auf die verhaltene Kritik zu antworten.
Mein Problem scheint im Datentyp Array zu bestehen, jedenfalls kommt es mir so vor. Ich habe folgendes versucht:

ausblenden volle Höhe Delphi-Quelltext
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:
type
  TForm1 = class(TForm)

  private
    { Private-Deklarationen }
  public
   A: array of Integer;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

procedure TForm1.Button1Click(Sender: TObject);

var   i : integer;
begin
  SetLength(A, 10);

  for i := 0 to 9 do
       A[i] := 100 * i;

  Form2.show;
end;

SOWEIT FORMULAR 1

DANN
procedure TForm2.FormCreate(Sender: TObject);
var myarray : array of integer;
begin

 setlength (myarray,length(Form1.A));
 myarray := Form1.A;


UND BEI der letzten Zeile kracht's - ich bekomme meine Werte nicht in das Array

Compilermeldung "INKOMPATIBLE TYPEN".

Vielleicht stehe ich ja auch irgendwie nur trivial auf'm Schlauch....

Danke für Eure Hilfe.

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Einsamer Schütze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

XP Prof
Delphi 2007 professional
BeitragVerfasst: Mo 06.11.06 16:09 
Hallo,
habe gerade noch mal das Kopieren der Arraystellen über eine Schleife eingebaut, dann geht's - aber kann man nicht auch zuweisen oder übergeben?

ES
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mo 06.11.06 18:45 
Hi
Nix Kritik, nur Hinweis, falls meine Erklärung nicht ausreicht.
Ok, den Weg hast du ja selbst gefunden und geanauso hätte ich es auch gemacht. Ein komplettes Array wirst du nicht zuweisen können, es sei denn, du machst ein Objekt daraus. Du kannst aber auch, um die Datenquelle nicht tausendmal zu kopieren die Arrayzellen wie folgt ansprechen
 xyz:=Form1.A[i];
Das hat den Vorteil, dass deine Daten nur an einer Stelle gehalten werden und du dich nicht irgendwann einmal fragst, welche nun die aktuelleren sind...

 Form1.A[i]:=xyz; // vielleicht wird's jetzt deutlich

Aber vielleicht hast du ja auch gute Gründe für die Kopie und willst die Ursprungsdaten nicht verändern oder was auch immer.
Ok, nun zum Schluß, ich wollte nicht kritisieren und sollte meine Antwort den Anschein erweckt haben, sorry, war hier und auch anderswo nicht meine Absicht.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
Einsamer Schütze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

XP Prof
Delphi 2007 professional
BeitragVerfasst: Di 07.11.06 20:44 
Danke oldmax, ich bin nicht so empfindlich, aber endlos die gleichen Fragen nervt mich selbst auch, alles easy, Danke.

ES