Moin Julius,
hier ist ein Entwurf für die Markierung mit der linken Maustaste. Das Skript verwendet als 'einfache Lösung' durchscheinende GUIs für die Anzeige der markierten Bereiche. In den
Global Variablen kann man einige Voreinstellungen setzen.
Ich weiß nicht, wie die 'Bereichssdatei' weiter verarbeitet wird ("Sprechende Bilder") . Deshalb mag noch etwas zusätzliche Arbeit nötig sein. Mit der Anzeige der Bereichsnamen bin ich auch noch nicht zufrieden. Geht das trotzdem in die richtige Richtung?
Code: Select all
/*
------- ? ? ? Beschreibung/Description ? ? ? -----------------------------------------------------------------------------------
Auf JPG-Bildern können rechteckige Bereiche markiert und jedem bereich ein Text (Beschreibung) zugeordnet werden.
Mit "Sprechende Bilder" wird der Text eines Bereichs angezeigt bzw. gesprochen, wenn der Bereich angeklickt wird.
Entwickelt für logopädische Therapie.
----------------------------------------------------------------------------------------------------------------------------------
Dieses Programm ist kostenlos und darf auch kostenlos weitergegeben werden.
Es darf auch jederzeit verbessert werden ;). Dann bitte Nachricht an [email protected].
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
*/
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode, Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir, %A_ScriptDir% ; Ensures a consistent starting directory.
SetBatchLines, -1 ; Have the script run at maximum speed.
; ================================================================================================================================
; - - Globale Variablen und Einstelungen - -
Global HPIC ; Handle des Bild-Controls
Global Datei ; Name der Markierungsdatei
Global Verzeichnis := "Bilder" ; Verzeichnis der Bider
Global HM := 0 ; Handle des aktuellen Markierungsfenster
Global MX, MY, MW, MH ; aktuelle Position und Größe des Markierungsfensters
Global MinH := 20 ; minimale Höhe einer Markierung
Global MinW := 20 ; minimale Breite einer Markierung
Global Trans := 100 ; Transparenz des Markierungsfensters
Global Bereiche := [] ; Objekt für bereits markierte Bereiche
; ================================================================================================================================
; - - Abbildungsparameter - -
GUIHoch := Round(A_ScreenHeight * 0.95) ; Höhe der Gui (gerundet)
BildHoch := Round(GUIHoch * 0.95) ; Höhe des Bilds (gerundet)
; ================================================================================================================================
; - - Bilderverzeichnis - -
If !InStr(FileExist(Verzeichnis), "D") ; wenn das Unterverzeichnis Bilder noch nicht existiert
FileCreateDir, %Verzeichnis%
; ================================================================================================================================
; - - Auswahl der Bilddatei - -
FileSelectFile, Bild, 3, %Verzeichnis%, kommhelp soft - Bitte ein Bild auswählen ..., Bilder (*.jpg)
SplitPath, Bild, , , , Titel
If (Titel = "")
{
MsgBox, 16, kommhelp soft, Sie haben keine Bilddatei ausgewählt!`n`nDie Anwendung wird beendet!
ExitApp
}
; ================================================================================================================================
; - - Markierungsdatei - -
Datei := Verzeichnis . "\" . Titel . ".txt"
If FileExist(Datei)
{
MsgBox, 36, kommhelp soft,
(LTrim
Es gibt bereits eine Markierungsdatei "%Datei%"!
Soll die Verarbeitung fortgesetzt werden?
Ggf. wird eine Kopie mit dem Zusatz "_Sicherung" erstellt.
)
IfMsgBox, YES
FileCopy, %Datei%, %Verzeichnis%\%Titel%_Sicherheitskopie.txt, 1
Else
ExitApp
FileDelete, %Datei%
}
; ================================================================================================================================
; - - Abbildungsparameter speichern - -
StartZeile := BildHoch . " Referenzhöhe" ; Übergabe der Bildhöhe bei der Festlegung der Rahmen
FileAppend, %StartZeile%, %Datei%, ; schreibt aktuelle Bildhöhe in die erste zeile der Datei
; ================================================================================================================================
; - - Hauptfenster für das Bild erstellen - -
Gui, Main:+OwnDialogs
Gui, Main:Margin, 0, 0 ; Abstände auf Null setzen
Gui, Main:Add, Pic, w-1 h%BildHoch% vPic +hwndHPIC +0x0100, %Bild% ; v Option, hwnd Option und SS_NOTIFY (0x0100) style zugefügt
Gui, Main:Show, , kommhelp soft - Bild markieren: %Titel%
OnMessage(0x0201, "WM_LBUTTONDOWN")
MsgBox, 0, kommhelp soft,
(LTrim
Zum Markieren von Bildbereichen bitte mit der linken Maustaste
auf die obere linke Ecke des Bereichs klicken und die Auswahl
dann mit gedrückter Maustaste nach rechts unten aufziehen.
Die markierten Bereiche müssen mindesten %MinW% Pixel breit und %MinH%
Pixel hoch sein.
)
Return
; ================================================================================================================================
; - - Das Programm wurde beendet - -
MainGuiClose:
ExitApp
; ================================================================================================================================
WM_LBUTTONDOWN(wParam, lParam) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx
; Globale Variablen: MX, MY, MW, MH
If (A_GuiControl = "Pic") {
MX := lParam & 0xFFFF
MY := lParam >> 16
MW := 0
MH := 0
ClipCursor(1)
OnMessage(0x0202, "WM_LBUTTONUP")
OnMessage(0x0200, "WM_MOUSEMOVE")
CreateSelectionGui()
}
}
; ================================================================================================================================
WM_LBUTTONUP(wParam, lParam) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms645608(v=vs.85).aspx
; Globale Variablen: HM, MX, MY, MW, MH, Datei
OnMessage(0x0200, "")
OnMessage(0x0202, "")
ClipCursor()
If (MW < MinW) || (MH < MinH)
{
Gui, %HM%:Destroy
}
Else
{
Gui, Main:+OwnDialogs
InputBox, Name
, Bezeichnung des Fläche
, Geben Sie einen Namen für diese Aktivfläche ein`n`nSpeichern mit OK oder Fläche verwerfen mit CANCEL
, , 280
If (ErrorLevel = 0)
{
Zeile := Format("`n{:}#{:}#{:}#{:}#{:}", Name, MX, MX + MW, MY, MY + MH)
FileAppend, %Zeile%, %Datei%
Gui, %HM%:Add, Text, w%MW% h%MH% Center +0x0200 +BackgroundTrans, %Name%
Gui, %HM%:Show
}
Else
{
Gui, %HM%:Destroy
}
}
HM := MX := MY := MW := MH := 0
}
; ================================================================================================================================
WM_MOUSEMOVE(wParam, lPAram) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms645616(v=vs.85).aspx
; Globale Variablen: HM, MX, MY, MW, MH
X := lParam & 0xFFFF
Y := lParam >> 16
MW := X - MX
MH := Y - MY
Gui, %HM%:Show, x%MX% y%MY% w%MW% h%MH%
}
; ================================================================================================================================
; - - Cursorbewegung begrenzen / Begrenzung aufheben - -
ClipCursor(Clip := False) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms648383(v=vs.85).aspx
; Globale Variablen: HPIC
If (Clip) { ; Cursorbewegung begrenzen, anderenfalls Begrenzung aufheben
VarSetCapacity(RC, 16, 0)
DllCall("GetWindowRect", "Ptr", HPIC, "Ptr", &RC)
}
DllCall("ClipCursor", "Ptr", Clip ? &RC : 0)
}
; ================================================================================================================================
; - - Markierungsfenster erstellen - -
CreateSelectionGui() {
; Globale Variablen: HPIC, HM, Trans
Gui, New, -Caption +LastFound +hwndHM +parent%HPIC%
Gui, Margin, 0, 0
Gui, Font, s10 Bold
Gui, Color, White
WinSet, Transparent, %Trans%
}
Moin Julius,
hier ist ein Entwurf für die Markierung mit der linken Maustaste. Das Skript verwendet als 'einfache Lösung' durchscheinende GUIs für die Anzeige der markierten Bereiche. In den [c]Global[/c] Variablen kann man einige Voreinstellungen setzen.
Ich weiß nicht, wie die 'Bereichssdatei' weiter verarbeitet wird ("Sprechende Bilder") . Deshalb mag noch etwas zusätzliche Arbeit nötig sein. Mit der Anzeige der Bereichsnamen bin ich auch noch nicht zufrieden. Geht das trotzdem in die richtige Richtung?
[code]/*
------- ? ? ? Beschreibung/Description ? ? ? -----------------------------------------------------------------------------------
Auf JPG-Bildern können rechteckige Bereiche markiert und jedem bereich ein Text (Beschreibung) zugeordnet werden.
Mit "Sprechende Bilder" wird der Text eines Bereichs angezeigt bzw. gesprochen, wenn der Bereich angeklickt wird.
Entwickelt für logopädische Therapie.
----------------------------------------------------------------------------------------------------------------------------------
Dieses Programm ist kostenlos und darf auch kostenlos weitergegeben werden.
Es darf auch jederzeit verbessert werden ;). Dann bitte Nachricht an
[email protected].
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
*/
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode, Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir, %A_ScriptDir% ; Ensures a consistent starting directory.
SetBatchLines, -1 ; Have the script run at maximum speed.
; ================================================================================================================================
; - - Globale Variablen und Einstelungen - -
Global HPIC ; Handle des Bild-Controls
Global Datei ; Name der Markierungsdatei
Global Verzeichnis := "Bilder" ; Verzeichnis der Bider
Global HM := 0 ; Handle des aktuellen Markierungsfenster
Global MX, MY, MW, MH ; aktuelle Position und Größe des Markierungsfensters
Global MinH := 20 ; minimale Höhe einer Markierung
Global MinW := 20 ; minimale Breite einer Markierung
Global Trans := 100 ; Transparenz des Markierungsfensters
Global Bereiche := [] ; Objekt für bereits markierte Bereiche
; ================================================================================================================================
; - - Abbildungsparameter - -
GUIHoch := Round(A_ScreenHeight * 0.95) ; Höhe der Gui (gerundet)
BildHoch := Round(GUIHoch * 0.95) ; Höhe des Bilds (gerundet)
; ================================================================================================================================
; - - Bilderverzeichnis - -
If !InStr(FileExist(Verzeichnis), "D") ; wenn das Unterverzeichnis Bilder noch nicht existiert
FileCreateDir, %Verzeichnis%
; ================================================================================================================================
; - - Auswahl der Bilddatei - -
FileSelectFile, Bild, 3, %Verzeichnis%, kommhelp soft - Bitte ein Bild auswählen ..., Bilder (*.jpg)
SplitPath, Bild, , , , Titel
If (Titel = "")
{
MsgBox, 16, kommhelp soft, Sie haben keine Bilddatei ausgewählt!`n`nDie Anwendung wird beendet!
ExitApp
}
; ================================================================================================================================
; - - Markierungsdatei - -
Datei := Verzeichnis . "\" . Titel . ".txt"
If FileExist(Datei)
{
MsgBox, 36, kommhelp soft,
(LTrim
Es gibt bereits eine Markierungsdatei "%Datei%"!
Soll die Verarbeitung fortgesetzt werden?
Ggf. wird eine Kopie mit dem Zusatz "_Sicherung" erstellt.
)
IfMsgBox, YES
FileCopy, %Datei%, %Verzeichnis%\%Titel%_Sicherheitskopie.txt, 1
Else
ExitApp
FileDelete, %Datei%
}
; ================================================================================================================================
; - - Abbildungsparameter speichern - -
StartZeile := BildHoch . " Referenzhöhe" ; Übergabe der Bildhöhe bei der Festlegung der Rahmen
FileAppend, %StartZeile%, %Datei%, ; schreibt aktuelle Bildhöhe in die erste zeile der Datei
; ================================================================================================================================
; - - Hauptfenster für das Bild erstellen - -
Gui, Main:+OwnDialogs
Gui, Main:Margin, 0, 0 ; Abstände auf Null setzen
Gui, Main:Add, Pic, w-1 h%BildHoch% vPic +hwndHPIC +0x0100, %Bild% ; v Option, hwnd Option und SS_NOTIFY (0x0100) style zugefügt
Gui, Main:Show, , kommhelp soft - Bild markieren: %Titel%
OnMessage(0x0201, "WM_LBUTTONDOWN")
MsgBox, 0, kommhelp soft,
(LTrim
Zum Markieren von Bildbereichen bitte mit der linken Maustaste
auf die obere linke Ecke des Bereichs klicken und die Auswahl
dann mit gedrückter Maustaste nach rechts unten aufziehen.
Die markierten Bereiche müssen mindesten %MinW% Pixel breit und %MinH%
Pixel hoch sein.
)
Return
; ================================================================================================================================
; - - Das Programm wurde beendet - -
MainGuiClose:
ExitApp
; ================================================================================================================================
WM_LBUTTONDOWN(wParam, lParam) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx
; Globale Variablen: MX, MY, MW, MH
If (A_GuiControl = "Pic") {
MX := lParam & 0xFFFF
MY := lParam >> 16
MW := 0
MH := 0
ClipCursor(1)
OnMessage(0x0202, "WM_LBUTTONUP")
OnMessage(0x0200, "WM_MOUSEMOVE")
CreateSelectionGui()
}
}
; ================================================================================================================================
WM_LBUTTONUP(wParam, lParam) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms645608(v=vs.85).aspx
; Globale Variablen: HM, MX, MY, MW, MH, Datei
OnMessage(0x0200, "")
OnMessage(0x0202, "")
ClipCursor()
If (MW < MinW) || (MH < MinH)
{
Gui, %HM%:Destroy
}
Else
{
Gui, Main:+OwnDialogs
InputBox, Name
, Bezeichnung des Fläche
, Geben Sie einen Namen für diese Aktivfläche ein`n`nSpeichern mit OK oder Fläche verwerfen mit CANCEL
, , 280
If (ErrorLevel = 0)
{
Zeile := Format("`n{:}#{:}#{:}#{:}#{:}", Name, MX, MX + MW, MY, MY + MH)
FileAppend, %Zeile%, %Datei%
Gui, %HM%:Add, Text, w%MW% h%MH% Center +0x0200 +BackgroundTrans, %Name%
Gui, %HM%:Show
}
Else
{
Gui, %HM%:Destroy
}
}
HM := MX := MY := MW := MH := 0
}
; ================================================================================================================================
WM_MOUSEMOVE(wParam, lPAram) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms645616(v=vs.85).aspx
; Globale Variablen: HM, MX, MY, MW, MH
X := lParam & 0xFFFF
Y := lParam >> 16
MW := X - MX
MH := Y - MY
Gui, %HM%:Show, x%MX% y%MY% w%MW% h%MH%
}
; ================================================================================================================================
; - - Cursorbewegung begrenzen / Begrenzung aufheben - -
ClipCursor(Clip := False) {
; msdn.microsoft.com/en-us/library/windows/desktop/ms648383(v=vs.85).aspx
; Globale Variablen: HPIC
If (Clip) { ; Cursorbewegung begrenzen, anderenfalls Begrenzung aufheben
VarSetCapacity(RC, 16, 0)
DllCall("GetWindowRect", "Ptr", HPIC, "Ptr", &RC)
}
DllCall("ClipCursor", "Ptr", Clip ? &RC : 0)
}
; ================================================================================================================================
; - - Markierungsfenster erstellen - -
CreateSelectionGui() {
; Globale Variablen: HPIC, HM, Trans
Gui, New, -Caption +LastFound +hwndHM +parent%HPIC%
Gui, Margin, 0, 0
Gui, Font, s10 Bold
Gui, Color, White
WinSet, Transparent, %Trans%
}[/code]