Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Globales Array - Verständnisfrage (https://www.delphipraxis.net/156395-globales-array-verstaendnisfrage.html)

Caleb 30. Nov 2010 15:27

Globales Array - Verständnisfrage
 
Hallo,

ich bin vor kurzem mit Delphi "konfrontiert" wurden und hab da mal eine Verständnisfrage.
Herr Google brachte mich nicht so richtig weiter ... ich gehe mal davon aus, dass es auch eine recht einfache Frage für euch ist =)

Nun zu meinem Problem:
Ich möchte 260 Werte in ein Array schreiben und dies in meiner Unit für all die anderen Pozeduren verfügbar machen. Dann geh ich mal davon aus, dass das in nem globalen Array am besten aufgehoben ist oder? Die Werte über die serielle Schnittstelle einlesen klappt auch wunderbar ... nur bekomme ich die Werte halt nur in meiner Prozedur und halt nicht global.

Ich habe dazu einen ähnlichen Ansatz gefunden ... http://www.w-hanisch.de/dokumente/De...0Hn%202010.pdf ... bei der die Problematik ähnlich gelöst wird (am PDF-Ende).

Wenn ich diesen Ansatz übernehme ...
Delphi-Quellcode:
{$R *.DFM}

ref: Array [0..260] Of Integer;

procedure TForm6.FormActivate(Sender: TObject);
.
.
.
... meckert der Compiler ständig an der Stelle *in x-beliebiger Prozedur* ...
Delphi-Quellcode:
for i:=0 to 260 do
   begin
      ref[i] := sp[i];
   end;
... mit Array-Typ erforderlich rum.

Ich freue mich freuen wenn ihr einem n00b wie mir helft.
thx4replies

Sir Rufo 30. Nov 2010 15:32

AW: Globales Array - Verständnisfrage
 
Wo und wie ist denn
Delphi-Quellcode:
sp
definiert?

Bummi 30. Nov 2010 15:35

AW: Globales Array - Verständnisfrage
 
ich weiß nicht was sp[i] ist, ob der Fehler von da kommt, in jedem Fall ist Dein Array nur in Form6 bekannt da Du es unterhalb von Implementation eingebaut hast.

Du kannst Arrays auch ganz normal als Variablen Deklarieren und Prozeduren mitgeben, am unkompliziertesten geht dies mit dynamischen Arrays.

DeddyH 30. Nov 2010 16:19

AW: Globales Array - Verständnisfrage
 
Nebenbei bemerkt sind 0..260 dann 261 Werte ;)

Caleb 30. Nov 2010 20:30

AW: Globales Array - Verständnisfrage
 
Zitat:

Zitat von DeddyH (Beitrag 1065142)
Nebenbei bemerkt sind 0..260 dann 261 Werte ;)

Okay ... war im Eifer des Gefechts.

Zitat:

Zitat von Sir Rufo (Beitrag 1065124)
Wo und wie ist denn
Delphi-Quellcode:
sp
definiert?

An das Array, welches in der speziellen Prozedur deklariert ist, werden mir geparste Daten meiner seriellen Schnittstelle festgehalten. Wenn ich beide Arrays in der Prozedur deklariere, dann funktioniert das auch wie es soll. Nun brauch ich aber das ref[]-Array global für andere Prozeduren =/
Vielleicht schwer ausgedrückt ... ich schieb morgen früh gleich ein paar Zeilen Code nach.

Zitat:

Zitat von Bummi (Beitrag 1065125)
ich weiß nicht was sp[i] ist, ob der Fehler von da kommt, in jedem Fall ist Dein Array nur in Form6 bekannt da Du es unterhalb von Implementation eingebaut hast.

Du kannst Arrays auch ganz normal als Variablen Deklarieren und Prozeduren mitgeben, am unkompliziertesten geht dies mit dynamischen Arrays.

ref[i] reicht mir vollkommen in Form6 aus. Die Array als Variablen den Prozeduren übergeben ... hmmm ... hab ich auch schon gedacht ... war damit aber leider ein wenig überfordert und dachte mir halt das es mit dem von mir gedachten Ansatz vielleicht noch am einfachsten funktioniert.

Ich danke jetzt schon für eure Antworten

Bummi 30. Nov 2010 20:41

AW: Globales Array - Verständnisfrage
 
Man könnte Dir besser helfen wenn man nicht soviel raten müsste, Du also etwas mehr Code am Stück posten würdest.

Caleb 30. Nov 2010 20:47

AW: Globales Array - Verständnisfrage
 
Zitat:

Zitat von Caleb (Beitrag 1065225)
Vielleicht schwer ausgedrückt ... ich schieb morgen früh gleich ein paar Zeilen Code nach.

Mach ich gern ... morgen früh =)

Caleb 1. Dez 2010 08:28

AW: Globales Array - Verständnisfrage
 
So ...
Delphi-Quellcode:
unit oem_ref;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  sgr_def, sgr_data, StdCtrls, ExtCtrls;

type
  TForm6 = class(TForm)
    sp_XYLine1: Tsp_XYLine;
    sp_XYPlot1: Tsp_XYPlot;
    Panel1: TPanel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Button2: TButton;
    Button1: TButton;
    Button3: TButton;
    Button4: TButton;
    Memo1: TMemo;
    sp_XYPlot2: Tsp_XYPlot;
    sp_XYLine2: Tsp_XYLine;
    sp_XYPlot3: Tsp_XYPlot;
    sp_XYLine3: Tsp_XYLine;
    Memo2: TMemo;
    procedure ReferenzErmitteln;
    procedure ReferenzZeichnen;
    procedure Ref;
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    FActiveFlagsSave : Word;
    FDebugMode : Boolean;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form6: TForm6;

implementation

uses oem_main,oemlib;
{$R *.DFM}

var
ref: Array [0..260] Of Integer;
und zwei Prozeduren
Delphi-Quellcode:
procedure TForm6.Ref;
var i:integer;
    sp:TSpectrum;

begin
   if not FDebugMode then
   begin
      Close;
      exit;
   end;
   OEMData.Devices[0].DebugFlags:=OEMData.Devices[0].DebugFlags or df_start;
   while OEMData.Devices[0].DebugFlags and df_start <> 0 do;

   sp_XYLine1.Clear;
   sp_XYLine1.LockInvalidate:=true;

   sp:=OEMData.Devices[0].Spectrum;
   for i:=0 to 260 do
   begin
      sp_XYLine1.AddXY(i,Sp[i]);
   end;
   sp_XYLine1.LockInvalidate:=false;
end;

procedure TForm6.ReferenzErmitteln;
var
    i:integer;
    sp:TSpectrum;
begin

   sp:=OEMData.Devices[0].Spectrum;
   for i:=0 to 260 do
   begin
      ref[i] := sp[i];
   end;
   with Memo1 do
   begin
   ScrollBars := ssBoth;
   Lines[0] := 'Mal kucken';
    for i := 0 to 260 do
     Lines.Add(IntToStr(i)+' '+IntToStr(ref[i]))
   end;
end;
Die Prozedur Ref wird mit einer Schleife immer wieder ausgeführt und zeichnet mir das ermittelte Spektrum meiner CCD-Zeile auch wunderbar.

In ReferenzErmitteln will ich nun einen Referenz-Array auslesen und global verfügbar machen (ref[i]). Wenn ich den Vektor in der Prozedur deklariere funktioniert das auch einwandfrei und die Werte werden mir in der Memo-Box richtig angezeigt ... leider nur in der Prozedur.

thx4replies

Bummi 1. Dez 2010 08:50

AW: Globales Array - Verständnisfrage
 
was mir auffällt 2* ref ???

Delphi-Quellcode:
var
ref: Array [0..260] Of Integer;


TForm6.Ref;

Caleb 1. Dez 2010 08:58

AW: Globales Array - Verständnisfrage
 
Autsch :roll:
thats it :)
Danke Bummi =)

btw: Schönes Forum


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz