AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehler beim Programm beenden
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Programm beenden

Ein Thema von Jens Hartmann · begonnen am 19. Okt 2015 · letzter Beitrag vom 15. Nov 2015
 
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: Fehler beim Programm beenden

  Alt 27. Okt 2015, 08:56
Ich würde den Weg von Zacherl gehen, also ein Record mit einen Enum-Typen zur Erkennung und einen allgemeinen TObject-Platzhalter, anstatt alle drei Objekte da rein zuverwursten.
Irgendwann kommt nämlich noch ein weiteres Objekt dazu und dann noch eins und noch eins...

Es wäre auch super mega klasse hilfreich, wenn du ein kleines Beispielprojekt zusammenstellen könntest.
Oft zeigt sich dann, dass das Problem an ganz anderen Stellen liegt.

Wenn man nämlich als hilfsbereiter Threadleser sich selber sowas ähnliches zusammenzimmert - siehe im folgenden - dann kracht es nicht!
So weiß man natürlich nicht, woran es genau in deinen Quelltext scheitert.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VirtualTrees;

type
  TOCustomers = class(TObject)
  private
    FID: Integer; // ID
    FESID: Integer; // ESID
    FName: string; // Name des Kunden
    FOrt: string; // Ort des Kunden
    FStraße: string; // Straße des Kunden
    FAnsprechpartnerId: Integer; // Ansprechpartnernummer
    FAnsprechpartner: string; // Ansprechpartner
    FAnsPosition: string; // Position/Stellung
    FEMail: string; // EMail des Ansprechpartners
    FTel1: string; // Telefonnummer 1 des Ansprechpartners
    FTel2: string; // Telefonnummer 2 des Ansprechpartners
    FFax: string; // Faxnummer des Ansprechpartners
    FBemerkung: string; // Kunden Zusatzinformation
  public
    property Kunden_Kundennummer: Integer read FID write FID;
    property Kunden_ESKundennummer: Integer read FESID write FESID;
    property Kunden_Kundenname: string read FName write FName;
    property Kunden_Ort: string read FOrt write FOrt;
    property Kunden_Straße: string read FStraße write FStraße;
    property Kunden_Bemerkung: string read FBemerkung write FBemerkung;
    property Ansprechpartner_Id: Integer read FAnsprechpartnerId write FAnsprechpartnerId;
    property Ansprechpartner_Name: string read FAnsprechpartner write FAnsprechpartner;
    property Ansprechpartner_Position: string read FAnsPosition write FAnsPosition;
    property Ansprechpartner_EMail: string read FEMail write FEMail;
    property Ansprechpartner_Telefon1: string read FTel1 write FTel1;
    property Ansprechpartner_Telefon2: string read FTel2 write FTel2;
    property Ansprechpartner_Fax: string read FFax write FFax;

  end;

  TOBuilding = class
  end;

  TOSystems = class

  end;

  TRKundenDaten = record
    FKundedaten: TOCustomers;
    FObjektdaten: TOBuilding;
    FSystemdaten: TOSystems;
  end;

  PRKundenDaten = ^TRKundenDaten;

type
  TForm1 = class(TForm)
    vstKunden: TVirtualStringTree;
    procedure FormCreate(Sender: TObject);
    procedure VstKundenFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  I : Integer;
  CustomerNode, BuildingNode, SystemNode: PVirtualNode;
  Daten: PRKundenDaten;
begin
  vstKunden.BeginUpdate;
  try
    vstKunden.Clear;

    CustomerNode := vstKunden.AddChild(nil);
    vstKunden.InvalidateNode(CustomerNode);
    vstKunden.NodeDataSize := SizeOf(TRKundenDaten);

    for I := 0 to 10 do
    begin
      BuildingNode := vstKunden.AddChild(nil);
      Daten := vstKunden.GetNodeData(CustomerNode);
      // das folgende geht anstandslos
      Daten^.FKundedaten := TOCustomers.Create;
      Daten^.FObjektdaten := TOBuilding.Create;
      Daten^.FSystemdaten := TOSystems.Create;
    end;

    vstKunden.SortTree(0, sdAscending, True);
  finally
    vstKunden.EndUpdate;
  end;
end;

procedure TForm1.VstKundenFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
  Kunden_Daten: PRKundenDaten;
begin
  case vstKunden.GetNodeLevel(Node) of
    0:
    begin
      Kunden_Daten := Sender.GetNodeData(Node);
      Finalize(Kunden_Daten^);
    end;
  end;
end;

end.
  Mit Zitat antworten Zitat
 


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 07:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz