![]() |
Desktop-Grid ‒ Größe einer Icon-Zellen
Heyho,
bin gerade dabei eine Anwendung zu schreiben, mit der ich meinen Desktop in Kategorien einteilen kann, sehr abstrakt gesagt :) Ich zeichne dazu eine semitransparente Fläche auf eine Kopie des aktuellen Desktophintergrunds und setze diese geänderte Version als Wallpaper. So entsteht der Eindruck, dass hinter den Icons Overlays liegen. Der User kann dann die Icons auf die entsprechenden Flächen legen, um so eine schnellere Suche zu ermöglichen. Über Sinn und Zweck will ich hier nicht weiter diskutieren, da es u.A. auch eine Direct2D Übung ist. Die Flächen selbst sollen nicht beliebig auf dem Desktop liegen, sondern am Raster der Icons ausgerichtet werden. Als Beispiel: bei 1920x1200 bekomme ich 16 Icons horizontal und 14 vertikal hin (Einstellungen: Windows 7, Kleine Symbole, Symbole am Raster ausrichten) -- und genau dieses Grid will ich eben haben. Ich habe schon einen Windows API Aufruf gefunden, aber der liefert mir nur ein teilweise richtiges Ergebnis:
Delphi-Quellcode:
function GetDesktopIconCellSize(): TRect;
const SPI_GETICONMETRICS = $002D; var im : ICONMETRICS; begin im.cbSize := SizeOf(ICONMETRICS); if (not SystemParametersInfo(SPI_GETICONMETRICS, SizeOf(ICONMETRICS), @im, 0)) then RaiseLastOSError(); Result := Rect(0, 0, im.iHorzSpacing, im.iVertSpacing); end;
Code:
In der Horizontalen fehlt mir hier auf jeder Seite der 3px-Margin-Wert, da der korrekte Wert 120px wäre (1920/16 = 120) wobei der mit Sicherheit änderbar ist, d.h. ich brauche das dynamisch.
Resultat: (0, 0, 114, 75)
Über den Wert SPI_GETGRIDGRANULARITY komme ich an gar keine Einstellungen, lediglich an eine Fehlermeldung:
Code:
Vielleicht habt ihr ja ein paar Ideen für mich, da ich langsam nicht mehr weiß, nach was ich alles suchen soll...
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EOSError mit der Meldung 'Systemfehler. Code: 1439. Unzulässiger Systemparameter (SPI_*)' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
AW: Desktop-Grid ‒ Größe einer Icon-Zellen
Hast du die Struktur mal mit ZeroMemory initialisiert, nicht dass da noch Müll drin steht.
|
AW: Desktop-Grid ‒ Größe einer Icon-Zellen
Du meinst schon beim Aufruf mit SPI_GETGRIDGRANULARITY, oder? Beim Aufruf mit SPI_GETICONMETRICS ist alles korrekt.
Delphi-Quellcode:
Hab das hier gerade getestet und es kommt ebenfalls der genannte Fehler. In der MSDN-Doku ist bzgl. dieser Konstanten keinerlei Beschreibung zu finden, lediglich auf "fremden" Seiten. Daher denke ich mal, dass es nicht mehr unbedingt unterstützt wird.
var
i : Integer; begin i := 0; if (not SystemParametersInfo(SPI_GETGRIDGRANULARITY, 0, @i, 0)) then RaiseLastOSError(); Button1.Caption := IntToStr(i); end; Bin auch gerne offen für alternative Wege ;) |
AW: Desktop-Grid ‒ Größe einer Icon-Zellen
|
AW: Desktop-Grid ‒ Größe einer Icon-Zellen
Zitat:
|
AW: Desktop-Grid ‒ Größe einer Icon-Zellen
Ich hatte es auch als kostenlose dreingabe schon aufm Notebook gehabt, und gelöscht, weil ichs nicht begriffen hatte ^^
Ich werd Deines gerne mal ausprobieren, wenns soweit ist :D Viel Erfolg! Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 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