Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Variable "P" ist möglicherweise nicht initialisiert worden (https://www.delphipraxis.net/184409-variable-p-ist-moeglicherweise-nicht-initialisiert-worden.html)

Chris211183 24. Mär 2015 09:25

Variable "P" ist möglicherweise nicht initialisiert worden
 
Hallo,

finde den Fehler nicht, warum soll P nicht initialisiert sein ?






Delphi-Quellcode:
 Function mysin(const X: Extended):Extended;                                    // Wrapper-Funktion, benötigt für Delphi 6 um Sinus-Funktion implementieren zu können
begin
   Result := sin(x);
end;



function THixHistoGraph.CalculatePointView                                     // Berechnung der Punkte für die Funktionsdarstellung
(AFunc: TFxFunction; const HistoBackround: TRect; x0, y0, dx, dy: Extended): TPointDynArray;
var
  x, y: Extended;
  i : integer;
begin                                                                          // für jede Spalte einen Punkt
   SetLength(Result, HistoBackround.Right - HistoBackround.Left + 1);          // Punkte berechnen
   x := 0;
   for i := Low(Result) to High(Result) do
   begin
   y := AFunc(x);
   y := -y;                                                                    // Canvas Nullpunkt obere linke Ecke mit Y- Achse nach unten !!!
   y := y0 + y;                                                                // oberen Rand Addieren
   y := y / dy;                                                                // Skalieren
   Result[i].x := HistoBackround.Left + i;
   Result[i].Y := HistoBackround.Top + Round(y);                               // runden
   x := x + dx;
   end;                                                                        // nächster Punkt

end;


procedure THixHistoGraph.DrawComponent;
var
   ComponentBackround         : TRect;                                        // zeichnet Komponente
   HistoBackround             : TRect;                                        // zeichnet die Darstellungsfläche der Komponente
begin

 if FBorderstyle = bsSingle then                                               // mit 3D-Rahmen

   begin
   inherited;
   if (Parent = NIL) or not visible
   then Exit;
   begin
   ComponentBackround := Rect(0, 0, Width, Height);                            // Koponentenhintergrund
   Canvas.Brush.Color := FColor;
   Canvas.Pen.Color  := FColor;
   Canvas.Pen.Style  := psSolid;
   Canvas.FillRect(ComponentBackround);
   Frame3D(Canvas, ComponentBackround, clBtnHighlight, clBtnShadow, 1);        // 3D Rahmen mit der Breite von 1 für Komponentenhintergrund
   end;

      begin
      HistoBackround := Rect(FGapLeft,                                        // Hintergrund der Darstellungsfläche
                              FGapTop,
                              Width - FGapRight,
                              Height - FGapBottom + 2);

      Canvas.Brush.Color := FHistoBkColor;
      Canvas.Pen.Color  := FHistoBkColor;
      Canvas.FillRect(HistoBackround);
      Frame3D(Canvas, HistoBackround, clBtnShadow, clBtnHighlight, 1);
      DrawGrid;
      end;
   end;
end;


procedure THixHistoGraph.DrawMeasureValue; // Soll die Werte Zeichnen, die er von extern bekommt
var
  x0, y0, dy, dx : Real;
  i : Integer;
  P : TPointDynArray;
  HistoBackround : TRect;


begin
   HistoBackround := Rect(FGapLeft,                                           // Hintergrund der Darstellungsfläche
                           FGapTop,
                           Width - FGapRight,
                           Height - FGapBottom + 2);

   InflateRect(HistoBackround, -1, -1);
   for i:= round(ViewXNominalMin) to round(ViewXNominalMax - 1) do
   begin
      ViewXNominalMin := FViewXNominalMin;
      ViewXNominalMax := FViewXNominalMax;
      x0 := FViewxNominalMin;
      y0 := (Height - FGapBottom - FGapTop) / FYScale.ValMax;
      dx := 0.05;
      dy := 0.02;
      P := CalculatePointView(mySin, HistoBackround, x0, y0, dx, dy);
      Canvas.Pen.Style := psSolid;
      Canvas.Brush.Color := clLime;
      Canvas.Pen.Color := clLime;
      DrawPointView(Canvas, HistoBackround, P); //HIER DIE FEHLERMELDUNG
   end;
end;

himitsu 24. Mär 2015 09:53

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Jupp, vollkommen korrekt.

Wenn DrawPointView dort nicht zufällig einen OUT-Parameter deklariert hat,
wo hast du P dann vorher etwas zugewiesen, was du dort übergeben würde?

Chris211183 24. Mär 2015 10:00

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Ja habe ich auch gerade gesehen, der hat ja gar Keine Länge :wall:

Im Prinzip muss ich doch, wenn ich externe Werte Darstellen will, erstmal diese in einem Array speichern und anschließend, je nachdem, wieviele Werte ich habe und wieviele Pixel mir zur Verfügung stehen übergeben....

Oder sehe ich das falsch ?

himitsu 24. Mär 2015 10:05

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Hmmm, stand das
Delphi-Quellcode:
P := CalculatePointView(...
vorhin auch schon drin?

Chris211183 24. Mär 2015 10:07

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
:-D ja, das tat es

DeddyH 24. Mär 2015 10:09

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Ein Glück, ich dachte schon, ich sei jetzt völlig verblödet :-D

Chris211183 24. Mär 2015 10:16

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Zitat:

Zitat von DeddyH (Beitrag 1294593)
Ein Glück, ich dachte schon, ich sei jetzt völlig verblödet :-D

:freak:

Weshalb ?

Ich bin doch hier die Krachlatte :stupid:

DeddyH 24. Mär 2015 10:21

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Weil ich die P-Zuweisung gesehen hatte und mich gefragt habe, wann denn der Fall eintreten könnte, dass sie nicht durchlaufen wird.

himitsu 24. Mär 2015 10:24

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Hatte beim ersten Mal die P-Zuweisung glatt übersehn.
Der Witz ist ja, daß dynamische Arrays eigentlich immer automatisch initialisiert sind, eben wegen deren automatischer Speicherverwaltung.

Allerdings innerhalb von CalculatePointView ist das Result zwar initialisiert, aber nicht unbedingt leer (Result des vorherrigen Schleifendurchlaufs)


Ein Bug im Compiler? :stupid:

Chris211183 24. Mär 2015 10:26

AW: Variable "P" ist möglicherweise nicht initialisiert worden
 
Haha, Leute Ihr verwirrt mich :feuerchen:


achso...aber, was is denn jetzt der Kasus Knacktus ?

was is falsch oder, was muss ich machen, damit das funzt...?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Seite 1 von 2  1 2      

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