AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Virtual treeview und Daten

Offene Frage von "wwild0473"
Ein Thema von wwild0473 · begonnen am 28. Jun 2006 · letzter Beitrag vom 30. Jun 2006
Antwort Antwort
wwild0473

Registriert seit: 28. Jun 2006
6 Beiträge
 
#1

Virtual treeview und Daten

  Alt 28. Jun 2006, 13:50
Hallo,

ich arbeite mit Delphi2005 Personal und dem Virtuell Treeview.
Um das Füllen der Knotendaten später in eine DLL auslagern zu können, nutze ich im Datenrecord pchar. Ich lese die Daten also aus den editfeldern aus, und speichere sie im record. Wenn ich sie später wieder aus dem Knoten einlese und an die Editfelder übergebe´, habe ich nur noch Müll. Echt zum Haare raufen. Hat jemand eine Idee? Interessanterweise habe ich keine Probleme, wenn ich im record nur strings verwende, und auf die Umwandlung verzichte.

Hier der Quellcode:
##################################################


Delphi-Quellcode:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, VirtualTrees,shellapi;
type ttreedata = record
      fcaption:pchar;
      fcolumnn1:pchar;
      text1: pchar;
      text2:pchar;
      text3:pchar;
end;
type
  TForm5 = class(TForm)
    vst: TVirtualStringTree;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    insertnodebutton: TButton;
    exitbutton: TButton;
    insertdatabutton: TButton;
    getdatabutton: TButton;
    procedure vstClick(Sender: TObject);
    procedure getdatabuttonClick(Sender: TObject);
    procedure exitbuttonClick(Sender: TObject);
    procedure insertdatabuttonClick(Sender: TObject);
    procedure insertnodebuttonClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
 Form5: TForm5;


implementation
var
  ptreedata:^ttreedata;

  knoten,knotenparent:pvirtualnode;
  insertmode,insertdata,getdata:boolean;
  benutzer:string;

{$R *.dfm}

procedure TForm5.FormShow(Sender: TObject);
begin


insertmode:=false;


end;

procedure TForm5.insertnodebuttonClick(Sender: TObject);
begin
if not insertmode then
begin
insertmode:=true;
insertdatabutton.Enabled:=false;
getdatabutton.Enabled:=false;
end
else
begin
insertmode:=false;
insertdatabutton.Enabled:=true;
insertdatabutton.Enabled:=true;
end;
end;

procedure TForm5.insertdatabuttonClick(Sender: TObject);
begin
if not insertdata then
begin
insertdata:=true;
insertnodebutton.Enabled:=false;
getdatabutton.Enabled:=false;
end
else
begin
insertdata:=false;
insertnodebutton.Enabled:=true;
getdatabutton.Enabled:=true;
end;



end;

procedure TForm5.exitbuttonClick(Sender: TObject);
begin
form5.close;
end;

procedure TForm5.getdatabuttonClick(Sender: TObject);
begin
if not getdata then
begin
getdata := true;
insertnodebutton.Enabled:=false;
insertdatabutton.Enabled:=false;
end
else
begin
 getdata := false;
insertnodebutton.Enabled:=true;
insertdatabutton.Enabled:=true;
 end;
end;

procedure TForm5.vstClick(Sender: TObject);
begin
if insertmode then
begin

knoten:=vst.addchild(vst.FocusedNode);
vst.NodeDataSize:=sizeof(ttreedata);
insertmode:=false;
insertdatabutton.enabled:=true;
getdatabutton.enabled:=true;
end; //von if insertmode ja
if insertdata then
begin
   insertdata:=false;
  insertnodebutton.Enabled:=true;
   getdatabutton.Enabled:=true;
   knoten:=vst.FocusedNode;
   vst.NodeDataSize:=sizeof(ttreedata);
   ptreedata:=vst.GetNodeData(knoten);
   ptreedata^.fcaption:=pchar(edit1.Text);
   showmessage(ptreedata^.fcaption);
   ptreedata^.text2:=pchar(edit2.Text);
   ptreedata^.text3:=pchar(edit3.Text);
end;
if getdata then
begin
  getdata:=false;
  insertnodebutton.Enabled:=true;
 insertdatabutton.Enabled:=true;
 vst.NodeDataSize:=sizeof(ttreedata);
 knoten:=vst.FocusedNode;
 ptreedata:=vst.GetNodeData(knoten);
 edit1.Text:=string(ptreedata^.fcaption);
 edit2.Text:=string(ptreedata^.text2);
 edit3.Text:=string(ptreedata^.text3);
 //showmessage( knotendaten^.fcaption);
end;

insertnodebutton.enabled:=true;
insertdatabutton.Enabled:=true;
getdatabutton.Enabled:=true;
end;

end.
##################################################


Vielen Dank schon jetzt für die Mühen
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Virtual treeview und Daten

  Alt 28. Jun 2006, 13:57
*räusper*
könntest du bitte deine quelltext als "Delphi-Code" formatieren (mit den buttons oben)
wäre ein entgegenkommen an alle, die diesen thread lesen, danke!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Virtual treeview und Daten

  Alt 28. Jun 2006, 14:34
pchar steht für point of char.
d.h. ein zeiger der auf ein speicherraum zeigt wo chars liegen.
mit deinem typcast pchar(edit.text) machst du einen zeiger auf den inhalt des edits.
dieses gibts du frei bzw. überschreibst du wieder.

besser wäre wenn du speicher mit alloc belegst und die strings dann dort reinkopierst.
nicht vergessen hinterher den speicher weider freigeben!

eine andere variante wäre du nutzt shortstrings.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
wwild0473

Registriert seit: 28. Jun 2006
6 Beiträge
 
#4

Re: Virtual treeview und Daten

  Alt 28. Jun 2006, 14:45
Hallo,

danke für deine schnelle Antwort. Mache Delphi noch nicht so lange, kann aber mit deiner Antwort Ansatzweise schon was anfangen. Shortstring kann ich nicht nehmen, da ich einen Pfad aus shelltreeview
später mal dort hinterlegen will. Kann ich das Problem mit den Strings in dem Ex/Import in DLL-Funktionen denn mit einem Record umgehen, daß strings enthält? Ich werde diese DLL ja ausschließlich in Delphi verwenden.
  Mit Zitat antworten Zitat
dimo

Registriert seit: 28. Okt 2005
22 Beiträge
 
#5

Re: Virtual treeview und Daten

  Alt 30. Jun 2006, 13:54
Delphi-Quellcode:
ptreedata^.fcaption:=StrAlloc(length(edit1.Text)+1);
StrPCopy(ptreedata^.fcaption, edit1.text);
...
  Mit Zitat antworten Zitat
Antwort Antwort


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 21: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