![]() |
TCustomShellTreeView.GetPath vom Linker entfernt
Hallochen,
ich versuche bei D6 durch ShellTreeView.Path einen StartPfad zu öffnen, doch leider sehe ich im Debugger dass TCustomShellTreeView.GetPath vom Linker entfernt wurde und deshalb funktioniert das Ganze nicht. Hat jemand eine Idee, was ich tun kann? Ich habe auch schon probiert, eine eigene Komponente MyShellTreeView zu basteln, doch dort entfernt er sie auch... Danke, Gina. |
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Einfach irgendwo im Code
Delphi-Quellcode:
Dann wird ja die GetPath-Methode benötigt und kann deshalb nicht vom Linker entfernt werden.
ShellTreeView.Path
|
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Ähm, wie meinst du das? Ich benutze das doch, also steht es auch im Code, und er entfernt es trotzdem. Es scheint schon in der ShellCtrls vom Linker entfernt worden zu sein... :(
Gina. |
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Zitat:
Wenn es im Code steht (z.B. einfach als Debug-Ausgabe) kann der Linker die entsprechende Getter-Methode nicht entfernen. |
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Liste der Anhänge anzeigen (Anzahl: 1)
so, hab jetzt mal einen Screenie gemacht, weil offensichtlich verstehe ich nicht so ganz, was du meinst :oops:
|
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Hallo,
ich hab mir mal die entsprechenden Routinen in der ShellCtrls näher angeschaut, konnte aber keinen Hinweis dazu entdecken, warum der Linker das entfernt. Hat jemand eine Idee? Oder wie man das evtl. selbst schreiben könnte, damit es funktioniert?
Delphi-Quellcode:
Tausend Dank, Gina.
protected
//.... property Path: string read GetPath write SetPath; //... function TCustomShellTreeView.GetPath: String; begin if SelectedFolder <> nil then Result := SelectedFolder.PathName else Result := ''; end; procedure TCustomShellTreeView.SetPath(const Value: string); var P: PWideChar; NewPIDL: PItemIDList; Flags, NumChars: LongWord; begin NumChars := Length(Value); Flags := 0; P := StringToOleStr(Value); try OLECheck(DesktopShellFolder.ParseDisplayName( 0, nil, P, NumChars, NewPIDL, Flags) ); FUpdating := True; SetPathFromID(NewPIDL); except on EOleSysError do raise EInvalidPath.CreateFmt(SErrorSettingPath, [Value]); end; FUpdating := False; end; procedure TCustomShellTreeView.SetPathFromID(ID: PItemIDList); var I: Integer; Pidls: TList; Temp, Node: TTreeNode; begin if FUpdating or (csLoading in ComponentState) or ((SelectedFolder <> nil) and SamePIDL(SelectedFolder.AbsoluteID, ID)) then Exit; FUpdating := True; Items.BeginUpdate; try Pidls := CreatePIDLList(ID); try Node := Items[0]; for I := 0 to Pidls.Count-1 do begin Temp := FolderExists(Pidls[I], Node); if Temp <> nil then begin Node := Temp; Node.Expand(False); end; end; Node := FolderExists(ID, Node); Selected := Node; if Assigned(Node) then begin if Assigned(FListView) then FListView.TreeUpdate(TShellFolder(Node.Data).AbsoluteID); if Assigned(FComboBox) then FComboBox.TreeUpdate(TShellFolder(Node.Data).AbsoluteID); end; finally DestroyPIDLList(Pidls); end; finally Items.EndUpdate; FUpdating := False; end; end; procedure TCustomShellTreeView.SetPath(const Value: string); var P: PWideChar; NewPIDL: PItemIDList; Flags, NumChars: LongWord; begin NumChars := Length(Value); Flags := 0; P := StringToOleStr(Value); try OLECheck(DesktopShellFolder.ParseDisplayName( 0, nil, P, NumChars, NewPIDL, Flags) ); FUpdating := True; SetPathFromID(NewPIDL); except on EOleSysError do raise EInvalidPath.CreateFmt(SErrorSettingPath, [Value]); end; FUpdating := False; end; procedure TCustomShellTreeView.SetPathFromID(ID: PItemIDList); var I: Integer; Pidls: TList; Temp, Node: TTreeNode; begin if FUpdating or (csLoading in ComponentState) or ((SelectedFolder <> nil) and SamePIDL(SelectedFolder.AbsoluteID, ID)) then Exit; FUpdating := True; Items.BeginUpdate; try Pidls := CreatePIDLList(ID); try Node := Items[0]; for I := 0 to Pidls.Count-1 do begin Temp := FolderExists(Pidls[I], Node); if Temp <> nil then begin Node := Temp; Node.Expand(False); end; end; Node := FolderExists(ID, Node); Selected := Node; if Assigned(Node) then begin if Assigned(FListView) then FListView.TreeUpdate(TShellFolder(Node.Data).AbsoluteID); if Assigned(FComboBox) then FComboBox.TreeUpdate(TShellFolder(Node.Data).AbsoluteID); end; finally DestroyPIDLList(Pidls); end; finally Items.EndUpdate; FUpdating := False; end; end; |
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Moin,
wie man bei deinem code (das bild) sieht verwendest du aber nur setPath, denn du setzt die property Path. Folglich steht es dem linker frei die unbenutzte methode getPath[u zu entfernen ;) |
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Hi,
ich bin auch davon ausgegangen, dass er für das Setzen der Property Path GetPath aufruft:
Delphi-Quellcode:
Selbst wenn ich eine eigene Funktion getPath schreibe und aufrufe entfernt er sie und ich verstehe einfach nicht warum... :cry: ich habe nur gelesen, dass bei D6 Path nicht funktioniert und wollte das nun ergründen und habe gehofft, dass ich dem Abhilfe schaffen kann.
property Path: string read GetPath write SetPath;
Ich habe erstmal notweise eine ziemlich umständliche Prozedur geschrieben, um den gleichen Effekt zu bekommen, aber die ist mir zu unflexibel. Was besseres ist mir bisher leider nicht eingefallen :/
Delphi-Quellcode:
Falls jemand eine Idee hat, was ich noch tun könnte, würde ich mich riesig freuen.
for i := 0 to (ShellTreeView1.Items.Count-1) do begin
if ShellTreeView1.Folders[i].PathName = LWD then begin //wechselt von Arbeitsplatz nach D:\ ShellTreeView1.Items[i].Selected := true; ShellTreeView1.Selected.Expand(false); for j := 0 to (ShellTreeView1.Items.Count-1) do begin if ShellTreeView1.Folders[j].PathName = Daten then begin //wechselt von D:\ nach D:\daten\ ShellTreeView1.Items[j].Selected := true; ShellTreeView1.Selected.Expand(false); ShellTreeView1.Items[j].Focused := true; break; end; end; end; end; Tausend Dank, Gina. |
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Zitat:
|
Re: TCustomShellTreeView.GetPath vom Linker entfernt
Dann liegt es also an etwas anderem, warum es nicht funktioniert? *grübel*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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