AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Desktop (Bildschirmausgabe) anhalten wie Hardcopy
Thema durchsuchen
Ansicht
Themen-Optionen

Desktop (Bildschirmausgabe) anhalten wie Hardcopy

Ein Thema von Mazel · begonnen am 1. Dez 2009 · letzter Beitrag vom 2. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 1. Dez 2009, 21:30
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
Miniaturansicht angehängter Grafiken
tabhover_278.png   starthover_177.png  
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 00:11
Gemacht habe ich es noch nicht, aber ich weiß wie es geht

Was ist starr und trotzdem bunt? Ein Bild

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

cu

oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 00:17
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 08:32
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 08:39
Also wenn ich sowas brauche, drücke ich einfach die Windowstaste, tippe "snip" ein und drücke Enter
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#6

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 13:53
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.
Miniaturansicht angehängter Grafiken
rahmen_946.png  
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 14:13
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 16:20
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#9

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 19:09
Hallo,

das ist wohl genau das was ich auch machen muss. 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
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#10

Re: Desktop (Bildschirmausgabe) anhalten wie Hardcopy

  Alt 2. Dez 2009, 19:17
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 16:05 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