AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wiederholtes Problem - BD7 vergißt Variableninhalte
Thema durchsuchen
Ansicht
Themen-Optionen

Wiederholtes Problem - BD7 vergißt Variableninhalte

Ein Thema von EccoBravo · begonnen am 10. Mär 2006 · letzter Beitrag vom 17. Mär 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#11

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 10. Mär 2006, 15:46
Ja, zur Begrifflichkeit - warum mache ich das so?
Mit den Komponenten liefere ich mit auch gleich die Variablen. Im Hauptprogramm brauche ich dann keine Variablen mehr deklarieren mit Ausnahme der Integers für For-Schleifen und sonstigen Indices.
Bin bisher damit ganz schön weit gekommen und kann kurze Codes erzeugen. Mittlerweile programmiere ich um die 15 Jahre - völliger Autodidakt - also arbeite mit einen ziemlich eigenwilligen Stil. Ihr mögt annehmen - nach 15 Jahren hat der Blödmann immer noch nichts kapiert - mach sein. Dann gebt mir das Geld und Zeit, Programmierkurse zu besuchen. Bin ja lernwillig

Danke und Grüße

E. B.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 10. Mär 2006, 16:14
Zitat von EccoBravo:
Ja, zur Begrifflichkeit - warum mache ich das so?
Mit den Komponenten liefere ich mit auch gleich die Variablen. Im Hauptprogramm brauche ich dann keine Variablen mehr deklarieren mit Ausnahme der Integers für For-Schleifen und sonstigen Indices.
Bin bisher damit ganz schön weit gekommen und kann kurze Codes erzeugen. Mittlerweile programmiere ich um die 15 Jahre - völliger Autodidakt - also arbeite mit einen ziemlich eigenwilligen Stil. Ihr mögt annehmen - nach 15 Jahren hat der Blödmann immer noch nichts kapiert - mach sein. Dann gebt mir das Geld und Zeit, Programmierkurse zu besuchen. Bin ja lernwillig

Danke und Grüße

E. B.
Selber Autodidakt, nie irgendwelche Kurse besucht aber viel angeschaut und abgeschaut. Vieles macht Sinn und man übernimmt es mit der Zeit. Das Argument Geld und Programmierkurs zählt überhaupt nicht, das habe ich auch ohne diese Dinge in meinen 15 Jahren Programmierung hinbekommen.

Grundsätzlich wäre aber trotz allem eine saubere Trennung hier von Vorteil. Schon allein in dem aktuellen Problemfall zeigt es sich, das man damit wohl leichter zu einer Lösung kommen würde.

Wir wollen dir hier bestimmt nicht alles anders vorschreiben als du es kennst, aber wir machen es auch nicht aus Spass daran dich zur Verzweiflung zu treiben sondern Erfahrungen von früheren Situationen etc. haben es uns gelehrt.
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#13

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 10. Mär 2006, 16:54
Danke danke,
ich bin dankbar und angewiesen auf Eure Hilfe, nochmals vielen Dank. Ich hatte nur plötzlich das Gefühl, als Dümmst Anzunehmender User dazustehen. Habe eben so meinen eigenen Stil entwickelt - bin aber ständig bestrebt, bessr zu werden und dazuzulernen - bin eben zu ungeduldig. Mal ein kleiner Blick auf www.eb-dosis.de.
Na dann ein schönes Wochende

EccoBravo
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 10. Mär 2006, 19:49
Und schonmal probiert die öffentlichen TDiffMat in den Private Bereich zu verschieben und umzubenennen um dann Properties mit den alten Namen zu deklarieren? Dann kannst du in den Set-Methoden doch schonmal rausbekommen ob und wann die Matrix bzw. die Werte überschrieben werden.

Grundsätzlich vergisst Delphi keine Variablen. Ich könnte mir auch an anderer Stelle einen falschen Speicherzugriff vorstellen der die Daten zerstört. Das würde ich im nächsten Schritt dann als ersten mal mit FastMM4 überprüfen. Zuerst aber mal die Properties.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 10. Mär 2006, 20:21
Hallo.

Die Vermutung liegt nahe, dass der Aufruf von Bild() die unerwarteten Werte in die Variablen einträgt. Mit einem black box test kannst du diese Vermutung widerlegen oder du hast den Fehler grob lokalisiert:

Delphi-Quellcode:
DiffBild1.Initialisieren(512,512; 400, 400, 1);
// DiffBild1.Bild(1, 1, 0.5);
DiffBild1.globDiffBild(1, 1, 0.5);
DiffBild1.Bild(1, 1, 0.5);
Übrigens habe ich nirgends entdecken können, was du mit "haben keinen Wert mehr" aussagen möchtest. Sind alle Inhalte 0? Eventuell hast du irgendwo zwischendurch den Konstruktor aufgerufen?

Aus der Nichtbenutzung u.a. des Parameter Schwelle schließe ich, dass du nicht den vollständigen Code zeigst. Nach einem Besuch deiner web site kann ich mir Gründe dafür vorstellen. Im sichtbaren Teil des Codes solltest du auf jeden Fall die Laufvariablen der Schleifen auf die Array-Grenzen anpassen. Low() und High() sind die Funktionen, die dir garantieren, dass du nicht außerhalb der Arraygrenzen zugreifst.

Grüße vom marabu
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#16

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 10. Mär 2006, 20:22
Hallo EccoBravo,

der Fehler tritt wahrscheinlich auf, weil Du auf nicht vorhandene Arrayelemente zugreifst.
Dynamische Arrays sind immer 0-basiert, Du benutzt jedoch beim Lesen und Schreiben den Indexbereich 1..n.

Gruß Hawkeye

[edit]oops, fast zeitgleich mit marabu [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#17

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 16. Mär 2006, 17:32
Will versuchen, DiffMat etc in private zu verschieben und mit property darauf zugreifen. Bei einfachen Werten ist mir das ja geläufig, aber wie mache ich das mit

read und write eines array of array of single

im property?

Danke E. B.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 16. Mär 2006, 18:37
Hallo E.,

du wirst eine Unit EBTypes haben:

Delphi-Quellcode:
unit EBTypes;
interface
type
  TMatrix = array of array of Extended;
Der Rest geht so wie in der Online-Hilfe beschrieben:

Delphi-Quellcode:
uses
  // ...
  EBTypes;

interface

type
  TDemoForm = class(TForm)
  // ...
  private
    FMatrix: TMatrix;
    function GetMatrix(iCol, iRow: Integer): Extended;
    procedure SetMatrix(iCol, iRow: Integer; eValue: Extended);
  // ...
  public
    property Matrix[iCol, iRow: Integer]: Extended read GetMatrix write SetMatrix;
  end;

implementation

function TDemoForm.GetMatrix(iCol, iRow: Integer): Extended;
begin
  Result := FMatrix[iCol, iRow];
end;

procedure TDemoForm.SetMatrix(iCol, iRow: Integer; eValue: Extended);
begin
  FMatrix[iCol, iRow] := eValue;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#19

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 16. Mär 2006, 18:39
Hallo, ich bins nochmal,

habe eben versucht, die Arrays in der Komponente private zu machen und über property zuzugreifen
Delphi-Quellcode:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

interface

uses
  Windows, SysUtils, Classes, Controls, ExtCtrls, Graphics, EB_Mathe;

type
    // TMatrix = array of array of single;

    TDiffMat =record
        PixHeight : integer;
        PixWidth : integer;
        PixSize : single;
        SizeHeight : single;
        SizeWidth : single;
        Dat : TMatrix; //array of array of single;
        rangeMat : array of array of boolean;
    end;

  TDiffBild = class(TPaintBox)
  private
     Pix : integer;
     wSize, hSize : single;
     cF : integer;
     privPlan : TDiffMat;
     privFilm : TDiffMat;
     privDiff : TDiffMat;
     privGlobDiff : TDiffMat;
     privLokDiff : TDiffMat;
     privGlobGamma: TDiffMat;
     privLokGamma : TDiffMat;
     privHoch : integer;
     privWeit : integer;

     function getPlan : TDiffMat;
     procedure setPlan(Wert:TDiffMat);
     function getFilm : TDiffMat;
     procedure setFilm(Wert:TDiffMat);
     function getLokDiff : TDiffMat;
     procedure setLokDiff(Wert:TDiffMat);
     function getGlobDiff : TDiffMat;
     procedure setGlobDiff(Wert:TDiffMat);
     function getLokGamma : TDiffMat;
     procedure setLokGamma(Wert:TDiffMat);
     function getGlobGamma : TDiffMat;
     procedure setGlobGamma(Wert:TDiffMat);

  protected

  public

  published
     property Plan : TDiffMat Read GetPlan Write SetPlan;
     property Film : TDiffMat Read GetFilm Write SetFilm;
     property globalDiff : TDiffMat Read GetGlobDiff Write SetGlobDiff;
     property lokalDiff : TDiffMat Read GetLokDiff Write SetLokDiff;
     property globalGamma : TDiffMat Read GetGlobGamma Write SetGlobGamma;
     property lokalGamma : TDiffMat Read GetLokGamma Write SetLokGamma;

     procedure Initialisieren(PixWeit,PixHoch : integer; SizeWeit, SizeHoch, PixSize:single);

     procedure Bild(vx,vy:integer;Schwelle:single);
     procedure globDiffBild(Schwelle:single);

  end;

procedure Register;

//##############################################################################

implementation
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     function TDiffBild.getPlan : TDiffMat;
     begin
         Result.Dat:=privPlan.Dat;
     end;
     procedure TDiffBild.setPlan(Wert:TDiffMat);
     begin
         privPlan.Dat:=Wert.Dat;
     end;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     function TDiffBild.getFilm : TDiffMat;
     begin
         Result.Dat:=privFilm.Dat;
     end;
     procedure TDiffBild.setFilm(Wert:TDiffMat);
     begin
         privFilm.Dat:=Wert.Dat;
     end;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     function TDiffBild.getGlobDiff : TDiffMat;
     begin
         Result.Dat:=privGlobDiff.Dat;
     end;
     procedure TDiffBild.setGlobDiff(Wert:TDiffMat);
     begin
         privGlobDiff.Dat:=Wert.Dat;
     end;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     function TDiffBild.getLokDiff : TDiffMat;
     begin
         Result.Dat:=PrivLokDiff.Dat;
     end;
     procedure TDiffBild.setLokDiff(Wert:TDiffMat);
     begin
         privLokDiff.Dat:=Wert.Dat;
     end;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     function TDiffBild.getGlobGamma : TDiffMat;
     begin
         Result.Dat:=privGlobGamma.Dat;
     end;
     procedure TDiffBild.setGlobGamma(Wert:TDiffMat);
     begin
         privGlobGamma.Dat:=Wert.Dat;
     end;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     function TDiffBild.getLokGamma : TDiffMat;
     begin
         Result.Dat:=privLokGamma.Dat;
     end;
     procedure TDiffBild.setLokGamma(Wert:TDiffMat);
     begin
         privLokGamma.Dat:=Wert.Dat;
     end;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mit dem Ergebnis, wenn ich ein privates Array schreiben will, kommt der Compilerfehler "Der linken Seite kann nichts zugewiesen werden"

Habe ich mir doch gedacht - was nun sprach der Zauberer

Kann man da noch helfen?

Danke E. B.
nDAU
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: Wiederholtes Problem - BD7 vergißt Variableninhalte

  Alt 16. Mär 2006, 19:01
Tut mir leid, aber ich hatte zwei Zeilen nicht mit in die Demo kopiert - habe es aber nachgebessert.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 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