Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Data zu Treeview hinzufügen ? (https://www.delphipraxis.net/112866-data-zu-treeview-hinzufuegen.html)

mkinzler 29. Apr 2008 13:32

Re: Data zu Treeview hinzufügen ?
 
Natürlich :oops:
Alos eigentlich wie es in diesem Thread schon beschrieben wurde

Delphiturbo 29. Apr 2008 14:16

Re: Data zu Treeview hinzufügen ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es funktioniert endlich :-D

aber leider wird immer der Link von GMX aufgerufen und egal wo ich klicke :mrgreen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var node: TTreeNode;
I: Integer;
data: PMyData;
Begin
node:=TreeView1.Items.GetFirstNode;
  while node <> nil do
   begin
    if node.level = 1 then
    for i:= 0 to 3 do
    data.Url := ListBox1.Items[i];
    new( data);
    Node.Data := data;
    node := node.GetNext;
  end;
End;

procedure TForm1.TreeView1DblClick(Sender: TObject);
var oNewNode   : TTreeNode;
     data: PMyData;
begin
    data := (Sender as TTreeView).Selected.Data;
    if data <> Nil then
    Webbrowser1.Navigate(data.url);
end;

end.
ListBox1 Inhalt :
Delphi-Quellcode:
[url]http://google.de[/url]
[url]http://yahoo.de[/url]
[url]http://msn.de[/url]
[url]http://gmx.de[/url]

toms 1. Mai 2008 07:51

Re: Data zu Treeview hinzufügen ?
 
Delphi-Quellcode:
for i:= 0 to 3 do
    data.Url := ListBox1.Items[i];
Der Sinn dieser Zuweisung verstehe ich nicht.
Da wird 4 Mal der gleiche Wert dem data.Url zugewiesen.

alzaimar 1. Mai 2008 07:58

Re: Data zu Treeview hinzufügen ?
 
Du hast zwei Zeilen vertauscht:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var node: TTreeNode;
I: Integer;
data: PMyData;
Begin
  node:=TreeView1.Items.GetFirstNode;
  while node <> nil do
   begin
    if node.level = 1 then
    for i:= 0 to 3 do
//    data.Url := ListBox1.Items[i];
//    new( data);
    new( data);                   // ERST ALLOZIIEREN
    data.Url := ListBox1.Items[i]; // DANN VERWENDEN
    Node.Data := data;
    node := node.GetNext;
  end;
End;

Chemiker 1. Mai 2008 09:59

Re: Data zu Treeview hinzufügen ?
 
Hallo Delphiturbo,

schau Dir mal dieses Tut. an. Hier werden die meisten Deiner Fragen sehr gut erklärt und mit Beispielen illustriert.

TreeView - Tut.

Vielleicht noch ein Tipp am Rande, da Data ein Pionter ist, erstelle ich mir von den Daten die ich als Data am TreeView hängen will ein Object und hänge dieses dann als Data an.

In etwa so müsste das Daten – Object aussehen:

Delphi-Quellcode:
unit uDataClassTreeView;

interface

Type
  TDatenfuerTreeViewClass= Class(TObject)
  private
    FUrl: String;
    FProviderTyp: String;
    function GetUrl: String;
    procedure SetUrl(const Value: String);
    function GetProvider: String;
    function GetProviderTyp: String;
    procedure SetProviderTyp(const Value: String);

  published
    property Url: String read GetUrl write SetUrl;
    property Provider: String read GetProvider;
    property ProviderTyp: String read GetProviderTyp write SetProviderTyp;
  public
    constructor Create(aUrl: String);
    destructor Destroy; override;
  End;

implementation

{ TDatenfuerTreeViewClass }

constructor TDatenfuerTreeViewClass.Create(aUrl: String);
begin
  inherited Create;
  Url:= aUrl;
end;

destructor TDatenfuerTreeViewClass.Destroy;
begin

  inherited Destroy;
end;

function TDatenfuerTreeViewClass.GetProvider: String;
var
  strHilf: String;
begin
  if FUrl <> '' then
  begin
    strHilf:= FUrl;
    Delete(strHilf, 1, Pos('/',strHilf)+1);
    Delete(strHilf,pos('.',strHilf),Length(strHilf));
    result:= strHilf;
  end;
end;

function TDatenfuerTreeViewClass.GetProviderTyp: String;
begin
  Result:= FProviderTyp;
end;

function TDatenfuerTreeViewClass.GetUrl: String;
begin
  result:= FUrl;
end;

procedure TDatenfuerTreeViewClass.SetProviderTyp(const Value: String);
begin
  if Value <> FProviderTyp then
  begin
    FProviderTyp:= Value;
  end;
end;

procedure TDatenfuerTreeViewClass.SetUrl(const Value: String);
begin
  if Value <> FUrl then
  begin
    FUrl:= Value;
  end;
end;

end.
Man könnte noch weitere Informationen in das Object stecken.

Dieses Object muss vor dem Einfügen in den Baum dann ganz normal mit Create erstellt werden und wird an einen Knoten angehängt.

Wenn das Form wieder zerstört wird ist es wichtig die Objecte wieder Frei zugeben,

Bis bald Chemiker

marabu 1. Mai 2008 10:02

Re: Data zu Treeview hinzufügen ?
 
Moin,

abgesehen von anderen Mängeln, die alzaimar und toms bereits aufgezeigt haben:

Delphi-Quellcode:
// Dies hier:
for i:= 0 to 3 do
  data.Url := ListBox1.Items[i];

// ist äquivalent zu dem hier:
data.Url := ListBox1.Items[3];
Kein Wunder, wenn viermal GMX im Browser erscheint - oder?

Hier ein wenig Code zum meditieren:

Delphi-Quellcode:
unit WebFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, ExtCtrls, ComCtrls;

type
  TWebForm = class(TForm)
    StatusBar: TStatusBar;
    TreeView: TTreeView;
    Splitter: TSplitter;
    WebBrowser: TWebBrowser;
    procedure FormCreate(Sender: TObject);
    procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
    procedure TreeViewDblClick(Sender: TObject);
    procedure TreeViewDeletion(Sender: TObject; Node: TTreeNode);
  end;

var
  WebForm: TWebForm;

implementation

{$R *.dfm}

uses
  IniFiles;

type
  TLink = class
    Name: string;
    Url: string;
    Comment: string;
  end;

function CreateLink(const name, url, comment: string): TLink;
begin
  Result := TLink.Create;
  Result.Name := name;
  Result.Url := url;
  Result.Comment := comment;
end;

function IsLink(node: TTreeNode): Boolean;
begin
  Result := Assigned(node.Data);
end;

procedure LoadBookmarks(const fn: TFileName; nodes: TTReeNodes);
var
  iCat, iLink: Integer;
  bm: TMemIniFile;
  cats, links: TStrings;
  catNode: TTreeNode;
  linkName, linkUrl: string;
begin
  cats := TStringList.Create;
  links := TStringList.Create;
  bm := TMemIniFile.Create(fn);
  try
    bm.ReadSections(cats);
    for iCat := 0 to Pred(cats.Count) do
    begin
      catNode := nodes.AddChild(nil, cats[iCat]);
      bm.ReadSectionValues(cats[iCat], links);
      for iLink := 0 to Pred(links.Count) do
      begin
        linkName := links.Names[iLink];
        linkUrl := links.ValueFromIndex[iLink];
        nodes.AddChildObject( catNode, linkName, CreateLink( linkName, linkUrl, '' ) );
      end;
    end;
  finally
    cats.Free;
    links.Free;
    bm.Free;
  end;
end;

procedure TWebForm.FormCreate(Sender: TObject);
begin
  LoadBookmarks(ChangeFileExt(ParamStr(0), '.ini'), TreeView.Items);
end;

procedure TWebForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(Node) and IsLink(Node)
    then Statusbar.SimpleText := TLink(Node.Data).Url
    else Statusbar.SimpleText := '';
end;

procedure TWebForm.TreeViewDblClick(Sender: TObject);
var
  Node: TTReeNode;
begin
  with Sender as TTreeView do
    Node := Selected;
  if Assigned(Node) and IsLink(Node) then
    with TLink(Node.Data) do
      WebBrowser.Navigate(Url);
end;

procedure TWebForm.TreeViewDeletion(Sender: TObject; Node: TTreeNode);
begin
  if IsLink(Node) then
    with TLink(Node.Data) do Free;
end;

end.
Die zugehörige Bookmark-Datei:

Code:
[Search]
Google=http://www.google.de
Yahoo=http://www.yahoo.de
AllTheWeb=http://www.alltheweb.com

[Communities]
DP=http://www.delphipraxis.net
SDC=http://www.swissdelphicenter.ch
Freundliche Grüße

Delphiturbo 1. Mai 2008 13:20

Re: Data zu Treeview hinzufügen ?
 
Hallo zusamen
Dein Code kann nicht den Link von dem INI-File aufrufen. Es passiert nichts durch DBLClick !

alzaimar 1. Mai 2008 13:27

Re: Data zu Treeview hinzufügen ?
 
Du Treeview Ereignisse zugewiesen?

Delphiturbo 1. Mai 2008 13:32

Re: Data zu Treeview hinzufügen ?
 
Zitat:

Zitat von alzaimar
Du hast zwei Zeilen vertauscht:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
...
    for i:= 0 to 3 do
//    data.Url := ListBox1.Items[i];
//    new( data);
    new( data);                   // ERST ALLOZIIEREN
    data.Url := ListBox1.Items[i]; // DANN VERWENDE
...

Delphi-Quellcode:
new( data);    
data.Url := ListBox1.Items[i]; // das Problem kommt hier (sehe unten)
Node.Data := data;
node := node.GetNext;

[Warning] Unit1.pas(44): FOR-Loop variable 'I' may be undefined after loop
[Warning] Unit1.pas(48): Variable 'I' might not have been initialized
[Warning] Unit1.pas(48): Variable 'data' might not have been initialized

mkinzler 1. Mai 2008 13:35

Re: Data zu Treeview hinzufügen ?
 
Du solltest auch den Schleifenkörper in begin ..end einschliessen!

Delphiturbo 1. Mai 2008 13:36

Re: Data zu Treeview hinzufügen ?
 
Zitat:

Zitat von alzaimar
Du Treeview Ereignisse zugewiesen?

ja, 3 mals :
1. TreeViewChange
2. TreeViewDblClick
3. TreeViewDeletion

Delphiturbo 1. Mai 2008 13:43

Re: Data zu Treeview hinzufügen ?
 
Zitat:

Zitat von mkinzler
Du solltest auch den Schleifenkörper in begin ..end einschliessen!

Ich habe den Teil, wie Du vorgeschlagen hast genommen.

Die Muhkuh 1. Mai 2008 13:45

Re: Data zu Treeview hinzufügen ?
 
Einfach nur abkopieren ist halt nicht. Da fehlt einfach ein begin und ein end, wie Markus schon sagte.

Ich denke mal, Du solltest Dir das eine oder andere Grundlagentutorial anschauen.

Nuclear-Ping 1. Mai 2008 14:09

Re: Data zu Treeview hinzufügen ?
 
[OT]
Oh man, wie Begriffsstutzig man sein muss ... :wall:

Kanns sein dass wir schon seit 4 Seiten um das gleiche herumreden und inzwischen mind. schon ein kompletter Quellcode zu dem Ganzen gepostet wurde?
[/OT]

Delphiturbo 1. Mai 2008 14:26

Re: Data zu Treeview hinzufügen ?
 
das liegt nicht an Begin und End von der For-Schleife :
Delphi-Quellcode:
 procedure TForm1.FormCreate(Sender: TObject);
var
 node: TTreeNode;
 I: Integer;
 data: PMyData;
Begin
 node:=TreeView1.Items.GetFirstNode;
 while Node <> nil do
  if Node.level = 1 then
   for i:= 0 to 3 do
    begin
     new( data);
     data.Url := ListBox1.Items[i];
     Node.Data := data;
     Node := Node.GetNext;
    end;
End;
Wenn ich das Programm kompiliere, dann erscheint zwar keine Fehlermeldung, bleibt das Programm unsichtbar bis ich mit ALT+Schift+Entf beande !!!

Ein Freund von mir hat das Problem mit einer anderen Idee gelöst, wollte ich aber gerne diesen Code weiterbearbeiten bis ich ihn zum laufen bringe.

mkinzler 1. Mai 2008 14:38

Re: Data zu Treeview hinzufügen ?
 
Füge
Delphi-Quellcode:
Node := Node.GetNext;
in den Else-Zweig ein

Das Problem liegt daran, wenn das Level nicht 1 ist, eine Endlosschleife entsteht, da diese nicht Nil ist aber auch nicht verändert wird


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz