Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Desktop (Bildschirmausgabe) anhalten wie Hardcopy (https://www.delphipraxis.net/144170-desktop-bildschirmausgabe-anhalten-wie-hardcopy.html)

Mazel 1. Dez 2009 21:30


Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Abend,

ich bin seit einiger Zeit damit beschäftig ein kleines Tool "zum Erstellen von Screenshots für unterschiedlichen Situationen" zu entwerfen. Die Funktionalität des Programms ist gegeben.

Eine Funktion davon ist es bspw. ein Bild von einem bestimmten Windows Element (Fenster, Tab, Toolbar, etc.) zu erstellen. Dabei fährt man bei gedruckter Maus über das Control und ein Rahmen wird darum gezeichnet. Beim Loslassen wird ein Bild vom gewählten Bereich erstellt.

Genau das ist aber mein Problem: Ich möchte nicht mit gedrückter Maus diese Aktion durchführen, da es einfach unpraktisch ist. Natürlich ist es möglich das Ganze währenes des MouseMove durchzuführen, dann ensteht aber ein großes Problem mit dem Zeichnen des Rahmens. Da ich auf den Desktop zeichne und viele Elemente ein Hover-Effekt haben, wird mein Rahmen gezeichnet und durch den Hover-Effekt zerstört bzw. im schlimmsten Fall zerhackt. Beim Wechsel in ein anderes Element funktioniert so auch nicht mehr das Überzeichnen, da teilweise kein Rahmen mehr vorhanden ist und somit an verschiedenen Stellen ein Rahmen gezeichnet wird an denen eigentlich kein Rahmen mehr vorhanden ist.

Ich suche also ein Lösungsansatz, der es mir ermöglicht Rahmen um die Elemente beim normalen MouseMove zu ziehen ohne das die Elemente meine Mausbewegung mitbekommen und darauf mit Hover-Effekten reagieren.

Ich hatte spontan "Hardcopy" installiert und gesehen, das bei gleicher Funktion der Desktop bzw. die Bildschirmausgabe angehalten wird. Kein Element bewegt sich mehr. Beim Überfahren kann man so ganz einfach die Elemente markieren ohne das eines reagiert. Die Bilder im Anhang zeigen das Resultat beim Überfahren.

Ich frage mich das funktionert. Kann man den Desktop bzw. die Bildschirmausgabe so anhalten bzw. die Ausgabe sogar sperren?

Ich hatte mir überlegt, dass hier ein Screenshot vom gesamten Desktop gemacht wird und mir dann in einem Vollbildfenster angezeigt wird. Wenn das der Fall sein sollte, muss aber über meine Mausposition das Handle des Controls hinter dem gezeigten Fenster ermittelt werden, doch wie macht man das?

Da es Hardcopy kann, muss es eine Lösung geben, welche ist die Frage. Hat dies jemand schon gemacht?

Gruß
Marcel

Sir Rufo 2. Dez 2009 00:11

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Gemacht habe ich es noch nicht, aber ich weiß wie es geht ;)

Was ist starr und trotzdem bunt? Ein Bild :mrgreen:

Mach einen Screenshot und blende das Bild einfach über deinen Desktop, jetzt kannst du aus dem Bild ganz gemütlich auswählen.

cu

oliver

Luckie 2. Dez 2009 00:17

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Guck dir mal EDA von Olli an: http://assarbad.net/en/stuff, das kann auch Rahmen um ausgewählte Elemente zeichen, wenn ich mich nicht irre.

himitsu 2. Dez 2009 08:32

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Auf den heutzutage schnellen Rechnern und in neueren Windowsversionen würde ich eventuell auch mal 'nen ganz anderen Weg gehn.

man nehme ein Fenster,
mache alles, bis auf einen "Rahmen" durchsichtig
und setze dieses nun über alle anderen Fesnter drüber (StayOnTop)

dann bracht man sich keine Gedanken darüber machen, wie man z.B. den alten, sich heutzutage schnell ändernten Desktop wiederherstellt und seine Zeichenoperationen rückgängig macht.

Vorallem seit Windows 7 mit seinem Desktopmanager sollte das super funktionieren. :)

jfheins 2. Dez 2009 08:39

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Also wenn ich sowas brauche, drücke ich einfach die Windowstaste, tippe "snip" ein und drücke Enter :stupid:

Mazel 2. Dez 2009 13:53

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Ich hatte mir überlegt, dass hier ein Screenshot vom gesamten Desktop gemacht wird und mir dann in einem Vollbildfenster angezeigt wird. Wenn das der Fall sein sollte, muss aber über meine Mausposition das Handle des Controls hinter dem gezeigten Fenster ermittelt werden, doch wie macht man das?
@Sir Rufo:
Das geht zwar mit dem Bild, bleibt aber die gestellte Frage, wie ich beim Überfahren des "Bildes" mit der Maus, herausbekomme um welches Element es sich handelt um es dann zu markieren? Ich habe es jetzt noch nciht ausprobieren können, bin aber der Meinung, wenn ich das Bild über den Desktop lege, ich nicht mehr die Element bzw. die Handles der Element erfassen kann.

@Luckie:
Danke für den Link, schau ich mir an. Das Zeichnen der Rahmen um die gewählten Elemente ist gelöst, aber vielleicht finde ich dort auch einen besseren Ansatz.

Nochmal als Hinweis. Das Problem ist nicht das Ermitteln des Elements oder das Zeichnen, sondern die aktiven Elemente nicht zu beachten.

Beispiel: Fährt man einfach mit der Maus über die Taskleiste in denen sich Programme befinden, so sieht man den Effekt, dass der Tab unter der Maus hervorhebt (andere Farbe). Da das Zeichnen des Rahmens sehr schnell geht, noch bevor der Button seine Hervorhebung zeigt, ist der Rahmen, nachdem der Button hervorgehoben ist, wieder weg. Ich habe jetzt im Anhang noch ein Bild, was dies nochmal zeigen soll.

Man sieht zwischen den Pfeilen einen Leerraum, dort sollte eine dünne Rote Linie sein, diese ist aber nicht mehr, weil ein anderes Element drüber lag und da ich nicht jedes mal neu zeichne, sieht man dies dann.

@himitsu:
Deinen Ansatz verwendet ich und zwar dann wenn man einen konkreten Bereich selbst wählen will, allerdings nicht ganz dursichtig, damit ich auf der Form zeichnen kann, sonst lande ich wieder auf dem Desktop. Dies funktioniert. Würde ich den Ansatz auch bei meine Problem verwenden, komm ich wieder nicht an die Handles hinter dem Fenster.

Es sei denn es gibt eine Möglichkeit das Element/Control hinter einem Fenster an der gewählten Position zu ermitteln. Das könnte helfen.

himitsu 2. Dez 2009 14:13

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Zitat:

Zitat von Mazel
Es sei denn es gibt eine Möglichkeit das Element/Control hinter einem Fenster an der gewählten Position zu ermitteln. Das könnte helfen.

- du fragst alle Hauptfenster ab (also alle auf dem Desktop)
- dann fragst du dich jeweils durch alle ihre Kindfenster und prüfst, ob der gewünschte Pinkt innerhlab ihres Clientbereichs liegt
- nicht zu vergessen, daß man natürlich nur sichtbare Fenster beachtet
- und dann sollte man auch noch die Z-Achse beachten, also welches Fenster liegt vor welchem

das Fenster/Control, welches am weitesten oben lieg, sichtbar ist, nicht zu deinem Fenster gehört und dessen Clientbereich den gewünschten Punkt behinhaltet, daß ist das Gesuchte :angel:

Sir Rufo 2. Dez 2009 16:20

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Also ich habe mir mal angesehen, wie Jing das macht.

- Es werden für alle erkennbaren Elemente die Koordinaten gemerkt (als TRect) und deren Z-Position (überlappende Fenster/Elemente)
- Es wird ein Screenshot erstellt
- Der Screenshot wird mittels der TRect/Z-Positionen und der aktuelle Mausposition entsprechend hervorgehoben/abgedunkelt

cu

Oliver

Mazel 2. Dez 2009 19:09

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
Hallo,

das ist wohl genau das was ich auch machen muss. :thumb: Ich nehme mal an, dass Hardcopy ähnliches Vorgehen hat.

Dennoch eine Frage zu der Z-Position. Das ist mir nicht ganz klar wie ich sie einsetzen muss: Befinde ich mich mit der Maus über ein Element welches wiederum in einem Fenster ist, möchte ich nur das Element auf den Screenshot hervorheben. Bin ich außerhalb des Elements aber immernoch im Fenster, dann will ich das gesamte Fenster hervorheben.

Die Z-Position muss irgendwie mit der Mausposition in Verbindung stehen aber wie genau?
Ist es so gemeint, dass wenn ich über ein Element bin und die Z-Position dieses Elements mit der Z-Position die vorher ermittelt wurde übereinstimmt, dass ich dann genau das Element habe?

Gruß
Mazel

himitsu 2. Dez 2009 19:17

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy
 
neee, die Maus kennt nur X und Y

Fenster dagegen auch noch Z

X = links/rechts
Y = hoch/runter
Z = vorne/hinten

wenn 2 Fenster an der selben Stelle sind, dann ist dort das mit dem größerem Z sichtbar

Das kennst du von deinen Formularen, wenn mehrere Komponenten übereinander liegen,
nur daß Delphi hier nur "Kontextmenü > Element > nach vorne/hinten setzen" kennt und das Z intern verwaltet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
Seite 1 von 2  1 2   

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