Autor Beitrag
delnu
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Do 30.03.17 19:03 
Ich habe mir das jetzt nicht alles durchgesehen und auch noch nichts runtergeladen.

Aber weil ich mich vor sehr vielen Jahren auch mal mit der Auswertung von Laufwerken befaßt hatte, weiß ich noch, daß besonders die tatsächliche Verfügbarkeit die meiste Bedeutung hat.

Ich weiß jetzt nicht, ob in dem hier vorgestellten Projekt diese Typen schon berücksichtigt sind:
Ramdisk, Wechsellaufwerke (Disk,CD/DVD, Speziallaufwerke) mit oder ohne Datenträger, mit SUBST zugewiesene Laufwerke,
zugewiesene Netzlaufwerke

Ich hatte damals ein MO-Laufwerk, auf das ich (oh, das war ja sogar noch unter DOS) per Interrupt zugreifen wollte.
Außerdem hatte ich viele SUBST-Laufwerke und wollte vermeiden, daß auf diese Weise Substlaufwerke als "echte"
Laufwerke vorgetäuscht werden, weil es dann vielleicht Probleme bei direkten Hardwarezugriffen oder bei diversen Auswertungen gegeben hätte.

Das nur als Anregung, ggf. auch Laufwerkstypen einzubeziehen, an die vielleicht noch nicht gedacht wurde.
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2039
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 31.03.17 15:42 
Guten Tag delnu,

danke für dein Interesse an dem Projekt und für den Hinweis.
Die Laufwerk-Typen sind seit Beginn an mit dabei. Gleich der erste Beitrag demonstriert den Umgang damit:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
// - Laufwerke trennen:
frDrive1.DriveType := [dtFixed, dtCDRom]; // ermittelt ein oder mehrere Laufwerk-Typen
// - Laufwerke auflisten:
frDrive1.GetDrives(Memo1.Lines, [dtNoRootDir, dtRemovable, dtFixed, dtRemote,
                                   dtCDRom, dtRAMDisk]);

Wenn du etwas Zeit hast, dann lies dir den Beitrag komplett durch. Wenn er dir zusagt, dann teste die Komponente sogleich und hinterlass' mir ein Feedback. :zustimm:

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
delnu
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Sa 01.04.17 11:43 
Hallo, Frühlingsrolle.

Momentan komme ich nicht dazu. Mein damaliges Projekt war außerdem auf einem Rechner mit Windows 98, der momenatn aus Platzmangel irgendwo abgestellt ist. Da müßte ich erst mal alles wieder in Betrieb nehmen und gucken. Aber anscheinend hast Du meinen Hinweis nicht so gedeutet wie er gemeint war. Zwra weiß (noch) wirklich nicht, was und wie Du prüfst, aber aus dem von Dir hier gepostenen Codeschnipesel erkenne ich beispielsweise keine explizite Unterscheidung von z.B. Ramdisk und SUBST-Laufwerken. Die mögen zwar unter Wechsellaufwerke zugeordnet werden können (weiß ich jetzt nicht so genau, vermute ich aber) - aber unterscheidest Du dann auch wirklich die Laufwerkstypen?

Es ist z.B. ein gewaltiger Unterschied, ob ein Wechsellaufwerk ein Disklaufwerk (mit ziemlich eingeschränkter Kapazität) oder z.B. ein MO-Laufwerk ist, und auch da gibt es unterschiedliche Kapazitätsgrößen. Solche Unterscheidungen bei der Hardware-Erkennung meinte ich. Es könnte natürlich sein, daß ich solche Feinheiten damals tatsächlich nur per DOS-Interrupt ermitteln konnte und das mit Windows (wie vieles) gar nicht mehr möglich ist.

Aber versprochen: Sobald ich (in einigen Monaten) Zeit dafür habe, sehe ich mir das mal alles sorgfältig durch!
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2039
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 01.04.17 12:14 
Ich sags mal so, es wird "grob" zwischen den Laufwerk-Typen unterschieden, gemäß GetDriveType.
Somit fallen z.B. virtuelle Laufwerke in die Rubrik "CD-Laufwerk". Es wird bei von dir erwähnten Disketten-Laufwerken nicht weiter unterschieden, ob sie nun 2.5, 3.5 Zoll/Inch ... sind. Es wird wohl die Gesamt-Kapazität ermittelt und der noch freie Speicherplatz des Mediums. Kurz und knapp gesagt, alle Laufwerke die sich im Arbeitsplatz wiederfinden, werden von der Komponente wiedergegeben.
Mindest-Voraussetzung für eine problemlose Nutzung, wäre hierbei Windows XP. Das steht auch so als Kommentar im Quelltext.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
delnu
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Sa 01.04.17 16:20 
Na gut, dann werde ich doch mal etwas schneller als eigentlich geplant raussuchen, wie ich das damals gemacht hatte, denn GetDrivetype war mir schon damals etwas zu primitiv. Jedenfalls könnte ich mir vorstellen, daß es Dir unter diesen Umständen doch was nutzen könnte (falls es nicht direkt auf Interrupts zugreift) ...

Bis die Tage.

EDIT: Gut, wenn man einen Server hat. Jetzt habe ich die Sachen doch auf die Schnelle gefunden. Das damals unter DOS war doch was anderes. Das hier hatte ich ab Delphi 4 getestet. Ich habe einfach mal das gesamte Verzeichnis in die ZIP-Datei gepackt, ohne jetzt zu prüfen, was davon wirklich nötig ist.

Vielleicht kannst Du/können auch andere damit was anfangen.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2039
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 01.04.17 17:27 
Besten Dank für die Hilfestellung! :beer: Dein Code liest sich gut, dank der Formatierung und den zahlreichen Kommentaren. Ich könnte durchaus einiges davon gebrauchen. Zwei Merkmale sind mir noch unbekannt, nämlich Base (u) und Flag (255). Das wird sich wohl mit dem Quelltext klären lassen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
delnu
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Sa 01.04.17 19:39 
Zu Deinen Fragen bzgl. "Base" und "Flag":

Base betrifft soviel ich in Erinnerung habe nur zugewiesene Laufwerke. Momentan habe ich keine Ramdisk und kein Substlaufwerk. Je nach Vernetzung kann da evtl. bei Netzlaufwerken auch was anderes als "\\" stehen. Ich hatte früher mal Kirschbaumnetz und das von PTS-DOS. Möglicherweise steht dann da was anderes. Steht bei mir unter "Base" also "\\", so sehe ich gleich (noch vor dem Laufwerksbuchstaben) daß es sich um Netzlaufwerke handelt. Unter "Bezeichnung" finde ich dann z.B. als Quell-Laufwerk "D-SHUTTLE" und dann habe ich z.B. unter "aktueller Pfad oder Quelle" die zugewiesenen Laufwerke "O" und und "Q" im Klartext als "\\MYLANSERVER\WWW" und "\\MYLANSERVER\D".

Das Flag stammt aus der erweiterten Pfad- und Dateinamenauswertung, mit der auch möglich ist, Dateigrößen über 2 GB (?) korrekt anzuzeigen. Sorry, daß ich jetzt nicht dazu komme, mir diese alten Quellen (von 2008) nochmal genau durchzusehen.
Es dürfte sich um "TVolumeInfoData" in der Unit "LAnalyse" handeln.

Ich weiß nur (wenn ich in die Quellen gucke) anhand meiner damaligen Kommentare, daß es auch mit Windows 98 und ME geteset wurde und je nach Version des Betriebs-Systems ggf. andere Sachen eingebunden werden müssen. Beispielsweie hatte ich die Fremdunit "Subst9x" lange Zeit mit Windows98 benutzt, um programmgesteuert Substlaufwerke jederzeit beliebig und vor allem schnell auf andere Pfade zu setzen.

Damals hatte ich noch kein Internet und habe darum noch viel mit Delphi gemacht. Ich bin ziemlich sicher, daß Du bei Auswertung des Betriebssystems mithilfe der von mir benutzten Sachen (wobei nur wenige von mir selbst stammen) auch noch Windows 98 unterstützen kannst. Was neuere Versionen als XP betrifft, dürfte es wahrscheinlich nicht soviel Neues geben außer den bescheuerten Restriktionen, die man ggf. beachten müßte falls sie Relevanz haben.

Danke für den Quelltext in der privaten Nachricht, aber ich weiß echt nicht, wann ich mir das ansehen kann.

Viel Erfolg weiterhin mit Deinem Projekt.

Nachtrag: Na gut, weil es ja eine einzige, komplette Unit ist, habe ich doch mal reingeguckt. Mein Problem dabei wäre aber nicht das Betriebssystem, sondern die Compilerversion. Die Unit enthält leider Bestandteile, durch die sie selbst mit der letzten mir verfügbaren Delphi-Version uncompilierbar ist. Da will ich erst gar nicht groß versuchen, drin rumzubasteln.

Beispielsweise kann ich mit diesen Anweisungen
_STORAGE_BUS_TYPE = (
BusTypeUnknown = $00,

nichts anfangen. = $00 und die folgenden werden bemängelt. Da wird dann bereits statt des Gleichheitszeichens eine schließende Klammer erwartet. Aber das ist nicht alles. Es gibt noch irgendwo andere Bemängelungen. Der Kommentar von jemandem, es auch schon mit Delphi 6 compilieren zu können, muß wohl eine Vorversion der Unit betreffen.

Suchmaschinensuche nach delphi "BusTypeUnknown" hat mir dann zwar Suche in der Delphi-PRAXiS WWW.DELPHIPRAXIS.NET/543483-POST24.HTML geliefert, aber dann müßte ich Deine Unit auseinanderpflücken und das will ich nicht.
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2039
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 02.04.17 03:54 
Der _STORAGE_BUS_TYPE ist eine Enumeration, die einen Zahlenwert (ordinal) zurücklieferen soll. Du kannst stattdessen ebenso einen ganzzahligen Datentypen hernehmen. Da dieser enum-Typ von 0 bis 16 und 127 geht, würden sich ShortInt oder Byte anbieten.
Das gilt ebenso für Folgende: _STORAGE_QUERY_TYPE, _STORAGE_PROPERTY_ID.
D.h.:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
type
  _STORAGE_BUS_TYPE = Byte;  // bzw. TStorageBusType um auf weitere Code-Anpassungen zu verzichten
  _STORAGE_QUERY_TYPE = Byte;  // bzw. TStorageQueryType
  _STORAGE_PROPERTY_ID = Byte;  // bzw. TStoragePropertyID

Und die Methode müsste auch entsprechend angepasst werden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function TfrDrive.PrepareDeviceDescription(Handle: THandle;
  var AQuery: TStoragePropertyQuery;
  var ADescriptor: TStorageDeviceDescriptor): Boolean;
var
  bytesReturned: DWord;
begin
  ZeroMemory(@AQuery, SizeOf(AQuery));
  ZeroMemory(@ADescriptor, SizeOf(ADescriptor));
  AQuery.PropertyId := StorageDeviceProperty;  // <-- mit 0 ersetzen
  AQuery.QueryType  := PropertyStandardQuery;  // <-- mit 0 ersetzen
  result := DeviceIoControl(Handle, IOCTL_STORAGE_QUERY_PROPERTY,
                            @AQuery, SizeOf(AQuery),
                            @ADescriptor, SizeOf(ADescriptor),
                            bytesReturned, nil);
end;


Ausprobieren kann nicht schaden. Besser als es in den Sand zu setzen.
Es würde mich interessieren, um welche Delphi Version es sich dabei handelt. Ich könnte dann entsprechende Compiler-Schalter setzen um das Problem zu umgehen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
delnu
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: So 02.04.17 10:55 
Danke für die Hinweise. Getestet hatte ich es aktuell mit Delphi 5 und habe auf einer anderen Bootpartition desselben Rechners auch noch Delphi 7. Aber es ist tatsächlich momentan bei mir auch eine Zeitfrage, sonst würde ich auch mal weider den Windows 98-Rechner hervorkramen, auf dem ich damals meine Tests gemacht hatte.
delnu
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Fr 07.04.17 15:06 
Hallo ! Mit Delphi 5 nicht compilierbar. Mit Delphi 7 geht's.

Allerdings erschließt sich mir der Sinn dieser Komponente nicht. Nach dem Einbinden der Komponente kann ich lediglich im Objektinspektor diverse Drivetypen anklicken, wobei ich dann z.B. sehe, daß Netzlaufwerke als "dtRemote" ausgewertet werden.

Aber wieso soll ich das alles innerhalb der Komponente auswählen? Gibt es denn kein Beispielprogramm, wo erkennbar wird, was die Komponente eigentlich im praktischen Einsatz macht?

Die paar Beispiele am Anfang des Threads sind nicht wirklich aufschlußreich, zumal es nur Fragmente sind, die teils auch gar nicht funktionieren bzw. fehlerhaft sind.

Sorry, aber für mich ist das nichts. Zu kompliziert in der Anwendung und vom Konzept her etwas zu weit oben angesiedelt.
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2039
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 08.04.17 01:52 
Guten Abend delnu,

user profile icondelnu hat folgendes geschrieben:
Mit Delphi 5 nicht compilierbar. Mit Delphi 7 geht's.

Dann liegt es wohl am Package. Wie ich hier bereits erwähnte: Leeres Package in der jeweiligen Delphi IDE erstellen, die Unit ufrDrive.pas einbinden (Icon kann auch, muss aber nicht) und kompilieren. Wenn du es nicht installieren möchtest, dann kannst du es auch zur Laufzeit als normale Klasse verwenden.

user profile icondelnu hat folgendes geschrieben:
Allerdings erschließt sich mir der Sinn dieser Komponente nicht.
user profile iconFrühlingsrolle hat folgendes geschrieben:
Allgemeines:

TfrDrive ist eine nicht-visuelle Delphi Komponente, die einem Anwender dabei helfen soll:
- Laufwerke zu ermitteln und aufzulisten
- (externe) Laufwerke zu trennen / auszuwerfen
- gültige Laufwerke zu erkennen
>> Neu <<
- Laufwerk-Informationen auszulesen

user profile icondelnu hat folgendes geschrieben:
Die paar Beispiele am Anfang des Threads sind nicht wirklich aufschlußreich, zumal es nur Fragmente sind, die teils auch gar nicht funktionieren bzw. fehlerhaft sind.

Die paar Codefragmente geben den gesamten Funktionsinhalt der Komponente wieder. Mehr kann sie nicht. Nebenbei wurde der Code aus einer Testanwendung mit Copy&Paste ins Forum eingefügt. Dass etwas nicht funktioniert oder fehlerhaft ist, kann ich nicht nachvollziehen. Das musst du näher erläutern.

user profile icondelnu hat folgendes geschrieben:
[...] wobei ich dann z.B. sehe, daß Netzlaufwerke als "dtRemote" ausgewertet werden
MSDN hat folgendes geschrieben:
DRIVE_REMOTE 4 The drive is a remote (network) drive.

user profile icondelnu hat folgendes geschrieben:
Zu kompliziert in der Anwendung und vom Konzept her etwas zu weit oben angesiedelt.

Wahrscheinlich weil du die Funktionsweise der Komponente noch nicht verstanden hast. Ich hoffe, ich kann dir mit der Demo einen besseren Überblick verschaffen, siehe Dateianhang.
Damit die Grafik keinen falschen Eindruck erweckt: Die weiße Fläche ist ein einfaches TListView. Die Icons sowie die Laufwerk-Beschriftungen und Seriennummer/n stammen von der Komponente.
Die Laufwerkgrößen ergeben sich entsprechend: Freier Speicherplatz / Gesamter Speicherplatz
Falls die Frage aufkommen sollte, wieso die Anzeige nicht automatisch beim Anschließen und Abziehen von externen Laufwerken aktualisiert wird: Weil, hab' ich vergessen!
Wer es dennoch umsetzen möchte, der darf die Ereignisse TfrDrive.OnDeviceConnect und TfrDrive.OnDeviceDisconnect dafür benutzen und die (Demo) Methoden SetIcons und SetDrives darin aufrufen.

frDriveDemo
Einloggen, um Attachments anzusehen!
_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
delnu
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Sa 08.04.17 03:04 
Nein. Es liegt bei Delphi 5 nicht am package. Ich hatte es angepaßt.

Es liegt an der Art der Speicherreservierung, wobei sich mir übrigens auch nicht erschließt, wieso man sowas überhaupt derart kompliziert macht. Ich habe selbst sehr komplexe Komponenten (als ich noch welche erstellt hatte) nie in reservierte Speicherbereiche ausgelagert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
[Fehler] ufrDrive.pas(763): Undefinierter Bezeichner: 'AllocateHWnd'
[Fehler] ufrDrive.pas(763): Nicht genügend wirkliche Parameter
[Fehler] ufrDrive.pas(774): Undefinierter Bezeichner: 'DeallocateHWnd'
[Fataler Fehler] frDriveDesign_D5.dpk(32): Verwendete Unit 'src\ufrDrive.pas' kann nicht compiliert werden


Sorry, aber das Konzept der Unit, die Umständlichkeit und Art der Nutzung geben für mich persönlich keinen Sinn. Es bringt auch keinem etwas, sich mühsam in etwas einzuarbeiten, das einen völlig anderen Weg geht, als man es selbst tun würde. Mir ging es lediglich drum, etwas Hilfestellung bei standardmässig nicht berücksichtigten Laufwerksarten zu geben, mehr nicht.

Wahrscheinlich hätte ich solche Komponente so umgesetzt, daß dann alle ermittelbaren Infos zu allen Laufwerken bereits im Objektinspektor zu sehen wären.

Jeder macht etwas eben so, wie er es selbst brauchen kann. Mehr will ich jetzt dazu nicht mehr äusser und werde mich hier auch nicht mehr einklinken.
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2039
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 08.04.17 03:30 
Zitat:
Es liegt an der Art der Speicherreservierung

Nö. Die Fehlermeldung sagt bereits aus, dass die Methoden 'AllocateHWnd' und 'DeallocateHWnd' undefiniert sind und die Paramter nicht ausreichen. Das hat rein garnichts mit Speicherreservierung zu tun.
Die Methoden sind entweder nicht in der Unit Classes.pas zu finden und benötigen mehr Parameter als in meinen Versionen, oder sie nennen sich leicht anders. Man kann es gegebenfalls ohne dem Classes.AllocateHWnd bzw. Classes.DeallocateHWnd schreiben und schaun ob es dann geht.
delnu hat folgendes geschrieben:
Wahrscheinlich hätte ich solche Komponente so umgesetzt, daß dann alle ermittelbaren Infos zu allen Laufwerken bereits im Objektinspektor zu sehen wären.

Wenn du meinst, dass es so einfach ist. Für ein einzelnes Laufwerk ginge das, aber für Mehrere gleichzeitig ginge es entweder über eine Auflistung von TStrings oder garnicht im Normalfall. Dafür müsste man einen darauf zugeschnittenen Komponenten- / Eigenschaften-Editor entwickeln. Ich wünsche dir gutes Gelingen dabei. ;)

Nachtrag:

Laut Recherche befinden sich jene Methoden in den Delphi Versionen < 6, in der Unit Forms.pas.
In den darauffolgenden Versionen findet man sie auch dort unter, und in der Unit Classes.pas.

Erweiterungen / Korrekturen wurden vorgenommen. Siehe 2.Beitrag !

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)


Zuletzt bearbeitet von Frühlingsrolle am Fr 30.06.17 14:13, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18638
Erhaltene Danke: 1606

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 01.06.17 10:24 
Die IFDEFs kannst du dir teilweise sparen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
uses
  Classes, Windows, SysUtils, ShellAPI, Graphics, Messages
  {$IFNDEF DELPHI6_UP}, Forms{$ENDIF}
  {$IFDEF FPC}, LCLIntf{$ENDIF};

//...

constructor TfrDrive.Create(AOwner: TComponent);
var
  i: Byte;
begin
  inherited;
  for i := 0 to 3 do
    FIcons[i] := TIcon.Create;
  DoDeviceChange;
  FHWndProc := AllocateHWnd(WndProc);
end;

destructor TfrDrive.Destroy;
var
  i: Byte;
begin
  for i := 0 to 3 do
    FIcons[i].Free;
  DeallocateHWnd(FHWndProc);
  inherited;
end;

Getestet mit Delphi 10.2 und dem aktuellsten Lazarus Build.

_________________
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2039
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 30.06.17 14:40 
Eine neue Version (20170630) steht zur Verfügung
Erweiterungen / Korrekturen siehe 2.Beitrag !

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)