Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TCustomShellTreeView.GetPath vom Linker entfernt (https://www.delphipraxis.net/41599-tcustomshelltreeview-getpath-vom-linker-entfernt.html)

Gina 5. Mär 2005 17:37


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.

Bernhard Geyer 5. Mär 2005 18:41

Re: TCustomShellTreeView.GetPath vom Linker entfernt
 
Einfach irgendwo im Code
Delphi-Quellcode:
ShellTreeView.Path
Dann wird ja die GetPath-Methode benötigt und kann deshalb nicht vom Linker entfernt werden.

Gina 5. Mär 2005 20:12

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.

Bernhard Geyer 5. Mär 2005 22:21

Re: TCustomShellTreeView.GetPath vom Linker entfernt
 
Zitat:

Zitat von Gina
Ä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... :(

Du hast geschrieben das Du es beim Debuggen anschauen willst. Und davon kann der Linker nichts wissen.
Wenn es im Code steht (z.B. einfach als Debug-Ausgabe) kann der Linker die entsprechende Getter-Methode nicht entfernen.

Gina 6. Mär 2005 15:38

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:

Gina 10. Mär 2005 09:23

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:
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;
Tausend Dank, Gina.

maximov 10. Mär 2005 10:44

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 ;)

Gina 17. Mär 2005 18:25

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:
property Path: string read GetPath write SetPath;
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.

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:
     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;
Falls jemand eine Idee hat, was ich noch tun könnte, würde ich mich riesig freuen.

Tausend Dank, Gina.

Luckie 17. Mär 2005 18:28

Re: TCustomShellTreeView.GetPath vom Linker entfernt
 
Zitat:

Zitat von Gina
Hi,

ich bin auch davon ausgegangen, dass er für das Setzen der Property Path GetPath aufruft:
Delphi-Quellcode:
property Path: string read GetPath write SetPath;

Wie kommst du denn darauf? Steht doch klipp und klar da, dass er zum Setzen der Eigenschaft SetPath aufruft.

Gina 17. Mär 2005 18:49

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 13:33 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