AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Diskette Formatieren - Zugriff verweigert
Thema durchsuchen
Ansicht
Themen-Optionen

Diskette Formatieren - Zugriff verweigert

Ein Thema von Gina · begonnen am 14. Apr 2005 · letzter Beitrag vom 16. Apr 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Gina
Gina

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

Diskette Formatieren - Zugriff verweigert

  Alt 14. Apr 2005, 20:30
Hallöle,

ich benutze diese Routine von Delphi-Source.de, um die Formatieren-Dialog von Windows aufzurufen.

Auf meiner Form hab ich ja eine ShellTreeView. Wenn ich nun, bevor ich die Diskette formatieren will, 1x auf die Diskette in der ShellTreeView geklickt habe, dann verweigert er die Formatierung mit dem Hinweis, dass das Diskettenlaufwerk in Benutzung bzw. locked sei... Selbst wenn ich inzwischen längst Laufwerk C: oder D: oder so angeklickt habe. Autorefresh ist aktiviert. Auch ein manueller refresh hilft nicht...

Hat jemand einen Tipp für mich, wie ich das bereinigen kann?

Tausend Dank, Gina.

PS: Und wenn ich den Formatieren-Dialog dann schließe, bekomme ich einen RangeCheck-Error... *grml*
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

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

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Diskette Formatieren - Zugriff verweigert

  Alt 14. Apr 2005, 20:53
Passiert das auch, wenn du die Diskette "normal" im Explorer formatieren willst?
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

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

Re: Diskette Formatieren - Zugriff verweigert

  Alt 14. Apr 2005, 21:01
Nein, hab ich auch gleich getestet. Das Muss mit der Routine oder der ShellTreeView zusammenhängen. Offensichtlich gibt er die Diskette nicht mehr "frei", wenn man dann Laufwerk C: etc. anklickt...

Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Diskette Formatieren - Zugriff verweigert

  Alt 14. Apr 2005, 21:09
Moin Gina,

vielleicht solltest Du, trotz der Bugliste, mal den ShellTreeView aus den TurboPower ShellShock-Komponenten für Deinen konkreten Anwendungsfall testen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

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

Re: Diskette Formatieren - Zugriff verweigert

  Alt 14. Apr 2005, 21:13
Ok, dann teste ich die auch noch... Irgendwie ist es nicht gerade ermutigend, wenn jede Komponente irgendwo eine "Macke" hat...

Thx, Gina.
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: Diskette Formatieren - Zugriff verweigert

  Alt 15. Apr 2005, 23:46
So...

habe die ShellShock-Kompos getestet. Sieht soweit recht gut aus. Ein paar Macken hat sie aber auch. Eine davon nervt besonders:

Ein gerade angelegter Ordner wird in der StShellTreeView mit dem Symbol für eine unbekannte Datei angezeigt und läßt sich auch nicht öffnen. Ein manueller Refresh bringt nur Abhilfe, wenn man das übergeordnete Laufwerk dabei auswählt...

Hat jemand eine Idee dazu?

Big Thx, Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Diskette Formatieren - Zugriff verweigert

  Alt 16. Apr 2005, 14:12
Moin Gina,

schau Dir doch mal die API MSDN-Library durchsuchenSHChangeNotify an.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

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

Re: Diskette Formatieren - Zugriff verweigert

  Alt 16. Apr 2005, 14:46
Hi Christian,

danke dir. Hab da mal ein paar Sachen ausprobiert. Insbesondere das Ereignis OnShellChangeNotify, aber so ganz klappen tut das nicht... Die Nachricht kommt an und er aktualisiert ja auch, aber offensichtlich ist dort ein kleiner Bug drin...

Das ist doch die Prozedur

Delphi-Quellcode:
procedure TStCustomShellTreeView.ShellEvent(Sender : TObject;
  SI1, SI2 : TStShellItem; Events : TStNotifyEventsSet);
aus der StShlCtl, oder?

Thx, Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Diskette Formatieren - Zugriff verweigert

  Alt 16. Apr 2005, 15:22
Moin Gina,

ich hab' jetzt nicht in die ShellShock-Sourcen geschaut, aber das müsste eine Kapselung von MSDN-Library durchsuchenSHChangeNotifyRegister sein.
Die andere Funktion sendet die Meldung, dass sich etwas geändert hat.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Gina
Gina

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

Re: Diskette Formatieren - Zugriff verweigert

  Alt 16. Apr 2005, 16:51
Hi,

die Prozedur sieht so aus:

Delphi-Quellcode:
procedure TStCustomShellTreeView.ShellEvent(Sender : TObject;
  SI1, SI2 : TStShellItem; Events : TStNotifyEventsSet);
const
  LastPidl : PItemIDList = nil;
var
  I : Integer;
  Node : TTreeNode;
  NewNode : TTreeNode;
  SF : TStShellFolder;
  Pidl : PItemIDList;
begin
  DoShellChangeNotify(SI1, SI2, Events);
  if InternalEvent then begin
    InternalEvent := False;
    Exit;
  end;
  if SI1 = nil then
    Exit;
  { Something happened in the shell. See if it's something we   }
  { need to handle. We could get this event twice. If we do, we }
  { don't add to the tree view twice. }
  if ((neFolderCreate in Events) or (neDriveAdd in Events))
       or ((neFileCreate in Events) and (toShowFiles in Options))
       and (SI1.Pidl <> LastPidl) then begin
    { A folder was created. See if its parent is one we have in the list. }
    Node := FindParentNode(SI1);
    if Node <> nil then
      { If the node doesn't have any subnodes then we don't }
      { need to do anything. }
      if Node.Count <> 0 then begin
        SF := TStShellFolder.Create(Controller);
        SF.Assign(TStShellFolder(SI1));
        if SF.FParentFolder = nil then
          SF.FParentFolder := Controller.DesktopFolder;
        SF.ParentList := Folders.FList;
        { It could be that a network drive is in the list but was }
        { not connected and has been reconnected. If that is the  }
        { case then we don't want to add the folder again. }
        NewNode := FindNodeByPath(SF.Path);
        if NewNode = nil then
          NewNode := Items.AddChild(Node, SF.DisplayName);
        NewNode.Data := Pointer(Folders.FList.Add(SF));
        LastPidl := SF.Pidl;
        NewNode.ImageIndex := SF.IconIndex;
        NewNode.SelectedIndex := SF.OpenIconIndex;
        NewNode.OverlayIndex := SF.OverlayIconIndex;
        if (neDriveAdd in Events) then
          NewNode.HasChildren := True;
        CustomSort(TreeCompareFunc, Integer(Self));
        Exit;
      end;
  end;
  if ((neFolderDelete in Events) or (neDriveRemove in Events)
       or ((neFileDelete in Events) and (toShowFiles in Options))) then begin
    { A folder was deleted. See if it is one we have in the list. }
    Node := FindNodeByPidl(SI1.Pidl);
    if Node = nil then
      Node := FindNodeByPath(SI1.Path);
    if (Node <> nil) and (Selected = Node) then
      Selected := Node.GetNext;
    if Node <> nil then begin
      { Remove it from the underlying list and from the tree view. }
      Folders[Integer(Node.Data)].Free;
      Folders.FList[Integer(Node.Data)] := nil;
      Node.Delete;
      Exit;
    end;
  end;
  if (neFolderRename in Events) or
     ((neFileRename in Events) and (toShowFiles in Options)) then begin
    { A folder was renamed. This could be an item deleted to the }
    { recycle bin. See if the destination is the recycle bin.    }
    SHGetSpecialFolderLocation(
      Application.Handle, CSIDL_DESKTOP, Pidl);

    if SI2 <> nil then begin
      if ILIsEqual(Pidl, SI2.Pidl) then begin
        { It's the recycle bin so delete from the tree view. }
        Node := FindNodeByPidl(SI1.Pidl);
        if Node <> nil then begin
          Folders[Integer(Node.Data)].Free;
          Folders.FList[Integer(Node.Data)] := nil;
          Node.Delete;
          Exit;
        end;
      end else
        { See if it's one we have in the list. }
        for I := 0 to Pred(Folders.Count) do begin
          if UpperCase(Folders[I].Path) = UpperCase(SI1.Path) then begin
            Folders[I].Assign(TStShellFolder(SI2));
            if Folders[I].FParentFolder = nil then
              Folders[I].FParentFolder := Controller.DesktopFolder;
            Node := FindNodeByPidl(SI2.FPidl);
            if Node <> nil then begin
              Node.Text := SI2.DisplayName;
              CustomSort(TreeCompareFunc, Integer(Self));
            end;
            Break;
          end;
        end;
    end;
  end;
  if (neNetShare in Events) or (neNetUnShare in Events) then begin
    Node := FindNodeByPidl(SI1.Pidl);
    if Node <> nil then
      Node.OverlayIndex := SI1.OverlayIconIndex;
  end;
  if (neMediaInsert in Events) or (neMediaRemove in Events) then begin
    { Media was added or removed. We need to flush the shell  }
    { cache and update the display or we'll just get a cached }
    { icon and display name. }
    Node := FindNodeByPath(SI1.Path);
    if Node <> nil then begin
      Node.ImageIndex := SI1.IconIndex;
      Node.Text := SI1.DisplayName;
    end;
  end;
end;
Die Benachrichtigung an sich kommt ja an, doch offensichtlich sucht er sich das falsche Symbol aus... Falls keinem in der Prozedur was auffällt, dann lasse ich es eben so. Mit meinem speziellen manuellen refresh geht es ja. Ist nur etwas unschön...

Thx, Gina.
Mein Lieblings-Spiele-Laden in Berlin: www.cometgames-store.de

{KDT}
.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:22 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