![]() |
Re: Data zu Treeview hinzufügen ?
Natürlich :oops:
Alos eigentlich wie es in diesem Thread schon beschrieben wurde |
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:
ListBox1 Inhalt :
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.
Delphi-Quellcode:
[url]http://google.de[/url]
[url]http://yahoo.de[/url] [url]http://msn.de[/url] [url]http://gmx.de[/url] |
Re: Data zu Treeview hinzufügen ?
Delphi-Quellcode:
Der Sinn dieser Zuweisung verstehe ich nicht.
for i:= 0 to 3 do
data.Url := ListBox1.Items[i]; Da wird 4 Mal der gleiche Wert dem data.Url zugewiesen. |
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; |
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. ![]() 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:
Man könnte noch weitere Informationen in das Object stecken.
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. 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 |
Re: Data zu Treeview hinzufügen ?
Moin,
abgesehen von anderen Mängeln, die alzaimar und toms bereits aufgezeigt haben:
Delphi-Quellcode:
Kein Wunder, wenn viermal GMX im Browser erscheint - oder?
// Dies hier:
for i:= 0 to 3 do data.Url := ListBox1.Items[i]; // ist äquivalent zu dem hier: data.Url := ListBox1.Items[3]; Hier ein wenig Code zum meditieren:
Delphi-Quellcode:
Die zugehörige Bookmark-Datei:
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.
Code:
Freundliche Grüße
[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 |
Re: Data zu Treeview hinzufügen ?
Hallo zusamen
Dein Code kann nicht den Link von dem INI-File aufrufen. Es passiert nichts durch DBLClick ! |
Re: Data zu Treeview hinzufügen ?
Du Treeview Ereignisse zugewiesen?
|
Re: Data zu Treeview hinzufügen ?
Zitat:
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 |
Re: Data zu Treeview hinzufügen ?
Du solltest auch den Schleifenkörper in begin ..end einschliessen!
|
Re: Data zu Treeview hinzufügen ?
Zitat:
1. TreeViewChange 2. TreeViewDblClick 3. TreeViewDeletion |
Re: Data zu Treeview hinzufügen ?
Zitat:
|
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. |
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] |
Re: Data zu Treeview hinzufügen ?
das liegt nicht an Begin und End von der For-Schleife :
Delphi-Quellcode:
Wenn ich das Programm kompiliere, dann erscheint zwar keine Fehlermeldung, bleibt das Programm unsichtbar bis ich mit ALT+Schift+Entf beande !!!
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; 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. |
Re: Data zu Treeview hinzufügen ?
Füge
Delphi-Quellcode:
in den Else-Zweig ein
Node := Node.GetNext;
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. |
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