AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Desktop-Grid ‒ Größe einer Icon-Zellen
Thema durchsuchen
Ansicht
Themen-Optionen

Desktop-Grid ‒ Größe einer Icon-Zellen

Ein Thema von s.h.a.r.k · begonnen am 11. Apr 2011 · letzter Beitrag vom 12. Apr 2011
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Desktop-Grid ‒ Größe einer Icon-Zellen

  Alt 11. Apr 2011, 14:34
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:
Resultat: (0, 0, 114, 75)
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.

Über den Wert SPI_GETGRIDGRANULARITY komme ich an gar keine Einstellungen, lediglich an eine Fehlermeldung:
Code:
---------------------------
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  
---------------------------
Vielleicht habt ihr ja ein paar Ideen für mich, da ich langsam nicht mehr weiß, nach was ich alles suchen soll...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Desktop-Grid ‒ Größe einer Icon-Zellen

  Alt 11. Apr 2011, 14:37
Hast du die Struktur mal mit ZeroMemory initialisiert, nicht dass da noch Müll drin steht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Desktop-Grid ‒ Größe einer Icon-Zellen

  Alt 11. Apr 2011, 14:54
Du meinst schon beim Aufruf mit SPI_GETGRIDGRANULARITY, oder? Beim Aufruf mit SPI_GETICONMETRICS ist alles korrekt.
Delphi-Quellcode:
var
  i : Integer;
begin
  i := 0;
  if (not SystemParametersInfo(SPI_GETGRIDGRANULARITY, 0, @i, 0)) then
    RaiseLastOSError();
  Button1.Caption := IntToStr(i);
end;
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.

Bin auch gerne offen für alternative Wege
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#4

AW: Desktop-Grid ‒ Größe einer Icon-Zellen

  Alt 11. Apr 2011, 15:50
Zum Vorhaben an sich: Machst Du also sowas?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: Desktop-Grid ‒ Größe einer Icon-Zellen

  Alt 11. Apr 2011, 15:54
Zum Vorhaben an sich: Machst Du also sowas?

Sherlock
Jup Allerdings hasse ich diese Tools, die sich der Icons bemächtigen, da ich schon einige böse Erfahrungen damit gemacht hatte. Teilweise waren Icons dann mal weg und wehe man deinstalliert dieses Tool wieder. Daher die Idee, dass ich auf den Hintergrund zeichne und so eine visuelle Gruppierung erzeuge.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#6

AW: Desktop-Grid ‒ Größe einer Icon-Zellen

  Alt 12. Apr 2011, 09:25
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

Viel Erfolg!

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  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 10:40 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