AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pointer wirrwarr. Bitte um hilfe

Ein Thema von hedie · begonnen am 4. Feb 2016 · letzter Beitrag vom 5. Feb 2016
Antwort Antwort
Seite 2 von 2     12
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Pointer wirrwarr. Bitte um hilfe

  Alt 5. Feb 2016, 18:14
Hallo,
das sind dann also Variablen deiner Klasse?


Delphi-Quellcode:
type
  TeVCLqueryTable = class
    private
      FVST:TVirtualStringTree;
      FMySQL:TmySQLe;


constructor TeVCLqueryTable.Create(const VST: TVirtualStringTree; const MySQL:TmySQLe);
begin
  FVST := VST;
  FMySQL := MySQL;
Wenn ja, brauchst du im Destructor gar nichts machen.

Gibst du das Objekt vielleicht aus Versehen 2mal frei?


Heiko
Heiko

Geändert von hoika ( 5. Feb 2016 um 18:17 Uhr)
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#12

AW: Pointer wirrwarr. Bitte um hilfe

  Alt 5. Feb 2016, 18:21
Ja, das sind variablen.

Nachfolgend das gesamte Interface

Delphi-Quellcode:
type
  TsqlData = record
    Data: array of string;
  end;
  PsqlData = ^TsqlData;

  //Das war ein versuch. Wird nicht benutzt
  PmySQL = ^TmySQLe;
  Pvst = ^TVirtualStringTree;

type
  TeVCLqueryTable = class
    private

      FVST:TVirtualStringTree;
      FMySQL:TmySQLe;
      FsearchMode:boolean;
      FsearchString:string;
      //FsqlData:array of string;

      procedure onGetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: string);

      procedure onFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);

      procedure onBeforeCellPaint(Sender: TBaseVirtualTree;
      TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
      CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);

    public

      constructor Create(const VST:TVirtualStringTree; const MySQL:TmySQLe);
      destructor Destroy; override;

      function Query(Query:string):integer;
      procedure FilterNodes(const Text : string);


  end;

implementation
...

Nein, das wird nicht zweimal freigegeben.
Sieht so aus:

Delphi-Quellcode:
procedure TForm6.Button1Click(Sender: TObject);
var
  table:TeVCLqueryTable;
begin

  //VirtualStringTree1 liegt als Objekt zur Designzeit auf dem Form
  //mysql ist eine Variable der Klasse TForm6 und wird zum Programmstart erstellt.


  table := TeVCLqueryTable.create(VirtualStringTree1, mysql);
  table.Query('SELECT * FROM rechnung');
  table.Free;
end;
Mit .free gibts direkt eine exception.
Ohne gibts keine und es funktioniert.

Auch bei mehrmaligem klicken.
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#13

AW: Pointer wirrwarr. Bitte um hilfe

  Alt 5. Feb 2016, 18:29
Ich glaube es liegt daran:

Delphi-Quellcode:
constructor TeVCLqueryTable.Create(const VST: TVirtualStringTree; const MySQL:TmySQLe);
begin
  FVST := VST;
  FMySQL := MySQL;

  //Hier weise ich Funktionen und Proceduren zu, welche sich innerhalb des Objekts befinden.
  FVST.OnGetText := onGetText;
  FVST.OnFreeNode := onFreeNode;
  FVST.OnBeforeCellPaint := onBeforeCellPaint;
  FsearchMode := false;


  //Optische einstellungen treffen!
  //FVST.Header.AutoSizeIndex := 0; //, hoVisible, hoColumnResize, hoHeaderClickAutoSort
  FVST.Header.Options := FVST.Header.Options + [hoAutoResize];
  FVST.TreeOptions.PaintOptions := [toShowRoot, toThemeAware];
  //FVST.TreeOptions.AutoOptions := [toAutoChangeScale];
  FVST.TreeOptions.MiscOptions := [toFullRepaintOnResize];
end;
Ich weise dem VirtualStringTree ein paar Proceduren und Funktionen zu, welche sich innerhalb des Objekts befinden.
Wie dumm auch ^^ Dann ist es klar, dass es nach dem Free nicht mehr geht.

Nun muss ich mir was überlegen, wie man dies am besten löst, so dass der VirtualStringTree weiterhin seine Daten anzeigt.
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Pointer wirrwarr. Bitte um hilfe

  Alt 5. Feb 2016, 19:33
Hallo,
dann darfst du die Klasse nicht freigeben,
oder setzt die Events vor der Freigabe auf nil.

Heiko
Heiko
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#15

AW: Pointer wirrwarr. Bitte um hilfe

  Alt 5. Feb 2016, 19:45
Danke für deine Antwort.

Leider benötigt VirtualStringTree die Events um korrekt zu funktionieren.
Da ich mehrere VSTs auf dem Formular habe, müsste ich für jedes ein eigenes privates Objekt innerhalb meiner Form erstellen. Das erscheint mir sehr unschön.

Ich sollte vielleicht lieber eine Klasse machen, welche von VirtualStringTree ableitet und diese um meine Funktionen ergänzt.

Idealerweise, könnte ich diese dann zur Designzeit auf das Formular ziehen.
Mal sehen, ob ich ein Tutorial finde, welches mir erklärt, wie ich eine Komponente erstllen kann...

By the way, wie kann man ein grosses Projekt übersichtlich halten?
Soll man funktionen zu bestimmten bereichen in eigene units auslagern und diese manuell dort hin kopiere?
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Pointer wirrwarr. Bitte um hilfe

  Alt 5. Feb 2016, 19:56
Hallo,
deine einzelnen Darstellungs-Klassen für die einzelnen VSTs nennt man Renderer.
Jeder VST bekomme seine eigene Renderer-Klasse und solange der VST existiert, muss die Renderer-Klasse existieren.
Pro Renderer-Klasse bietet sich eine eigene Datei (Unit) an.

Heiko
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:23 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