Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 5 von 6   « Erste     345 6      

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