AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TCustomShellTreeView.GetPath vom Linker entfernt
Thema durchsuchen
Ansicht
Themen-Optionen

TCustomShellTreeView.GetPath vom Linker entfernt

Ein Thema von Gina · begonnen am 5. Mär 2005 · letzter Beitrag vom 17. Mär 2005
Antwort Antwort
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#1

TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 5. Mär 2005, 18:37
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.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 5. Mär 2005, 19:41
Einfach irgendwo im Code
ShellTreeView.Path Dann wird ja die GetPath-Methode benötigt und kann deshalb nicht vom Linker entfernt werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#3

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 5. Mär 2005, 21:12
Ä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.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 5. Mär 2005, 23:21
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#5

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 6. Mär 2005, 16:38
so, hab jetzt mal einen Screenie gemacht, weil offensichtlich verstehe ich nicht so ganz, was du meinst
Miniaturansicht angehängter Grafiken
path_650.jpg  
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#6

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 10. Mär 2005, 10:23
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.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#7

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 10. Mär 2005, 11:44
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
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#8

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 17. Mär 2005, 19:25
Hi,

ich bin auch davon ausgegangen, dass er für das Setzen der Property Path GetPath aufruft:
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... 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.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 17. Mär 2005, 19:28
Zitat von Gina:
Hi,

ich bin auch davon ausgegangen, dass er für das Setzen der Property Path GetPath aufruft:
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

Registriert seit: 23. Dez 2004
Ort: Berlin
161 Beiträge
 
Delphi 6 Professional
 
#10

Re: TCustomShellTreeView.GetPath vom Linker entfernt

  Alt 17. Mär 2005, 19:49
Dann liegt es also an etwas anderem, warum es nicht funktioniert? *grübel*
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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