Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie kann ich globale Variable auflösen? (https://www.delphipraxis.net/93633-wie-kann-ich-globale-variable-aufloesen.html)

daschaos 8. Jun 2007 15:37


Wie kann ich globale Variable auflösen?
 
Nich schlagen, ich bin noch relativer Programmieranfänger und ich weiß einfach nich so recht, wie ich dieses Problem lösen soll, ohne das Array global zu deklarieren :).

Ich habe eine Zeichenmethode, in der ich 2 Punkte P und Q übergeben bekomme, diese möchte ich in Arrays speichern:

Delphi-Quellcode:
procedure PaintRectangle(P,Q: TPoint; Layer: Integer; Caption: WideString; Counter: Integer);
var
  Rect: TRect;
begin
  Rect.TopLeft := P;
  Rect.BottomRight := Q;
  SetLength(PointsArrayP, 20);
  SetLength(PointsArrayQ, 20);
  PointsArrayP[Counter] := P;
  PointsArrayQ[Counter] := Q;
  Canvas.Brush.Color := LayerColorScheme(Layer);
  Canvas.Pen.Color := clBlack;
  Canvas.Pen.Width := 4;
  Canvas.Rectangle(Rect);
  Canvas.TextRect(Rect, P.X, P.Y, Caption);
end;
Im MouseMove-Event muss ich halt auf die Daten der Arrays zugreifen:

Delphi-Quellcode:
procedure TTreemapChart.MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var
  i, help: Integer;
begin
  help := Length(PointsArrayP);
  for i := 0 to help-1 do
  begin
    if (PointsArrayP[i].X <= X) and (X <= PointsArrayQ[i].X) and (PointsArrayP[i].Y <= Y) and (Y <= PointsArrayQ[i].Y) then
      Self.Hint := DoGetHint(i);
  end;
end;
Momentan hab ich die Arrays halt global deklariert, muss das aber irgendwie wegbekommen. Wie mach ich das?

DeddyH 8. Jun 2007 15:47

Re: Wie kann ich globale Variable auflösen?
 
Deklarier sie doch als Objektvariablen Deines Formulars. Also statt
Delphi-Quellcode:
var DeinArray: array of TPoint;
Delphi-Quellcode:
type TDeineForm = class(TForm)
  private
  ...
  DeinArray: array of TPoint;
  ...
end;

sirius 8. Jun 2007 15:48

Re: Wie kann ich globale Variable auflösen?
 
Wo liegt denn deine Paintrectangle-Funktion? Und wie kannst du von dort auf das Canvas-Objekt zugreifen (welches auch immer)?

Grundsätzlich müsste es so aussehen:

Delphi-Quellcode:
unit ....

interface

type TTreeMapChart=class(...)
      ... {was auch immer hier steht}
     
     private
       {hier deine Variablen}
       PointsArrayP,PointsArrayQ: array of ....

     public
       procedure paintrectangle(....)
end;

....

implementation

procedure TTreeMapChart.paintrectangle(...)
{hier deine Prozedur
Du kannst jetzt auf alle Variablen aus dem Objekt TTreeMapChart zugreifen}
begin
...
end;

{und so weiter}


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.

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