just me wrote: ↑15 Oct 2020, 04:41
Interessanter ist, wie Du Dir den Ablauf vorstellst.
Bei welcher Aktion und für welche Dauer soll das Bild angezeigt werden?
Welche weiteren Aktionen sollen per ListView gesteuert werden?
Die Idee ist nicht neu, man sieht es oft als übertrieben fetten Tooltip mit Hilfstexten, wenn man die Maus über Elemente der Anbieter Gui 'bewegt'
Bewegt man die Maus zum nächsten Element, wird sofort der Kontext zu der neuen Mouse-Under-Position angezeigt.... und so stellte ich es mir bei dem ListView vor, wenn ich mit der Maus über einer Zeile bin, dann gibt es nur ein Bild welches damit assoziiert ist...
...und für die Zeit die ich auf der Zeile verweile, soll das Bild [verkleinert?] rahmenlos nahe dem Mauszeiger oder der Zeile angezeigt werden.
Wie schon erwähnt, war das nur ein schneller Gedanke, aber ich habe hier schon Pferde kotzen gesehen, daher finde ich hier ist jede Frage berechtigt.
sorry das ist ein kölscher Ausdruck und trägt nichts negatives
Wenn das mit dem Mouse-hovern zu kompiliert ist, klicken wir halt auf die gemeinte Zeile
Für eine Skriptsprache wie AHK können sie recht 'anstrengend' sein.
Wenn es anstrengend wird, mache ich den Rechner aus
Zwischen der ersten Frage und A_Now sind weitere Fragen aufgetaucht.
Der folgende Code darf nur als Lernstück gelesen werden, viele Variablen und Arrays existieren obwohl sie nicht genutzt werden, weil ich im Verlauf erkannte, das es auch anders/einfacher geht
Mit der Erstellung von diesem Code habe ich verstanden wie Arrays gehandhabt werden, der Groschen ist quasie gefallen.
Wenn man n Arrays mit einer jeweils eindeutigen ID verknüpft, kann man sie in Relation zueinander auswerten.
Auch das sowas funktioniert war neu für mich:
Code: Select all
For PropName, PropValue In Props
{
%PropName% := PropValue
Aktuell stehe ich vor der Aufgabe, eine GUI zu erstellen. Ein ListView alleine reicht nicht aus, um die Daten die ich Mittlerweile aus einem jpeg lesen kann auszuwerten.
Einmal habe ich nicht verstanden wie ich mehrere ListView in einer Gui verwalten kann. Etliche Versuche
Gui, 1:default zu platzieren schlugen fehl.
Dann würde ich gerne in der Spalte ganz rechts, die mit dem Bild Link, anstatt dem Link ein Pic einfügen
- 2020-10-15 at 22.35.49.jpeg (18.19 KiB) Viewed 1304 times
. Hierbei komme ich auch nicht weiter.
Und jetzt eine Verständnisfrage, wenn die Gui mit Daten gestartet ist, wie werden die angezeigten Gui Werte neu geschrieben?...
...ich habe z.B. mit
%PropName% := PropValue alle Variablen mit Daten gefüllt, wie bringe ich diese vielleicht aktualisierten Werte auf den Schirm?
z.B. eine ComboBox, wie ersetze ich deren Inhalt durch neuen Content... wie gesagt wenn die Gui schon gestartet ist, bis dahin komme ich grade so, mir gehts um das aktualisieren.
Vielen Dank fürs lesen
Ohne ein Pic in
C:\Users\Administrator\Desktop\GPS Foto Content\original\017.JPG wird der Code nicht laufen, darum habe ich die Antwort der MsgBox mit eingefügt
Code: Select all
#SingleInstance force
#NoEnv
SetKeyDelay 20
SetTitleMatchMode, 2
MapsPic =
(
E29EA86D3DE41EBA638759CD2057D5C5;https://www.google.com/maps/vt/data=-V9-TK0q6WAaz3IsV0GA0ycLYcOMQ0PNNJEBUA_q3uRXBE7ewg9PGjtxTWmuevN_hAz23l4WgP6IFdB-vocHhp9VpY1XHnAH4NH8xm0tzABYaxJeJi6TbfDh_jQk7JSg6y5P2ddetR6FS0jrTxuEnTA5yLH3RkoJqxPKDNJPt_M
)
MapsCal :=
(
"E29EA86D3DE41EBA638759CD2057D5C5;https://www.google.com/maps/place/50%C2%B019'54.0%22N+6%C2%B056'24.6%22E"
)
FileNameOriginal =
(
E29EA86D3DE41EBA638759CD2057D5C5;C:\Users\Administrator\Desktop\GPS Foto Content\original\017.JPG
)
;4D5BA5807538F20F22447CB2865FC894;C:\Users\Administrator\Desktop\GPS Foto Content\original\018.JPG
;5C1548941B721514241F1196B1974030;C:\Users\Administrator\Desktop\GPS Foto Content\original\021.JPG
KoordinatenFuerSort :=
(
"E29EA86D3DE41EBA638759CD2057D5C5;https://www.google.com/search?q=50%C2%B019'54.0%22N+6%C2%B056'24.6%22E;[email protected]"
)
FileZiel =
(
E29EA86D3DE41EBA638759CD2057D5C5;C:\Users\Administrator\Desktop\GPS Foto Content\2011\Juni\3\2011.Juni.3--07.07.22--017.JPG
)
MapsPicArr := Object()
counter := []
loop, Parse, % MapsPic, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;https://www.google.com/maps/vt/data=-V9-TK0q6WAaz3IsV0GA0ycLYcOMQ0PNNJEBUA_q3uRXBE7ewg9PGjtxTWmuevN_hAz23l4WgP6IFdB-vocHhp9VpY1XHnAH4NH8xm0tzABYaxJeJi6TbfDh_jQk7JSg6y5P2ddetR6FS0jrTxuEnTA5yLH3RkoJqxPKDNJPt_M
{
Arr:= StrSplit(A_LoopField, ";")
; if Arr.Length()=2
MapsPicArr[Arr[1]] := (Arr[2] ? Arr[2] : Arr[1])
counter.Push(Arr[1])
ID := Arr[1]
}
;/*
MapsCallArr := Object()
loop, Parse, % MapsCal, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;https://www.google.com/maps/place/50%C2%B019'54.0%22N+6%C2%B056'24.6%22E
{
Arr:= StrSplit(A_LoopField, ";")
MapsCallArr[Arr[1]] := (Arr[2] ? Arr[2] : Arr[1])
}
FileNameArr := Object()
loop, Parse, % FileNameOriginal, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;C:\Users\Administrator\Desktop\GPS Foto Content\original\017.JPG
{
Arr:= StrSplit(A_LoopField, ";")
FileNameArr[Arr[1]] := (Arr[2] ? Arr[2] : Arr[1])
}
KoordinatenFuerSortaArr := Object()
loop, Parse, % KoordinatenFuerSort, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;https://www.google.com/search?q=50%C2%B019'54.0%22N+6%C2%B056'24.6%22E;[email protected]
{
Arr:= StrSplit(A_LoopField, ";")
KoordinatenFuerSortaArr[Arr[1]] := (Arr[2] ? Arr[2] : Arr[1])
}
KoordinatenFuerSortbArr := Object()
loop, Parse, % KoordinatenFuerSort, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;https://www.google.com/search?q=50%C2%B019'54.0%22N+6%C2%B056'24.6%22E;[email protected]
{
Arr:= StrSplit(A_LoopField, ";")
KoordinatenFuerSortbArr[Arr[1]] := (Arr[3] ? Arr[3] : Arr[1])
}
FileZielArr := Object()
loop, Parse, % FileZiel, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;C:\Users\Administrator\Desktop\GPS Foto Content\2011\Juni\3\2011.Juni.3--07.07.22--017.JPG
{
Arr:= StrSplit(A_LoopField, ";")
FileZielArr[Arr[1]] := (Arr[2] ? Arr[2] : Arr[1])
}
;*/
GetGpsDataALLArr := Object()
GetGpsDatazArr := Object()
GetGpsDatayArr := Object()
GetGpsDataxArr := Object()
loop, Parse, % FileNameOriginal, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;C:\Users\Administrator\Desktop\GPS Foto Content\original\017.JPG
{
Arr:= StrSplit(A_LoopField, ";")
Props := GetGpsData((Arr[2] ? Arr[2] : Arr[1]))
For PropName, PropValue In Props
{
%PropName% := PropValue
GetGpsDataxArr[Arr[1]] .= (PropName ? PropName : Arr[1]) "`n"
GetGpsDatayArr[Arr[1]] .= (PropValue ? PropValue : Arr[1]) "`n"
; GetGpsDatazArr[Arr[1]] .= (PropName ? PropName : Arr[1]) ": " (PropValue ? PropValue : Arr[1]) "`n"
GetGpsDataALLArr[Arr[1]] .= (PropName ? PropName : Arr[1]) ": " (PropValue ? PropValue : Arr[1]) "`n"
}}
GetAllDetailszArr := Object()
GetAllDetailsyArr := Object()
GetAllDetailsxArr := Object()
loop, Parse, % FileNameOriginal, `n, `r ; E29EA86D3DE41EBA638759CD2057D5C5;C:\Users\Administrator\Desktop\GPS Foto Content\original\017.JPG
{
Arr:= StrSplit(A_LoopField, ";")
Props := GetAllDetails((Arr[2] ? Arr[2] : Arr[1]))
For PropName, PropValue In Props
{
%PropName% := PropValue
GetAllDetailsxArr[Arr[1]] .= (PropName ? PropName : Arr[1]) "`n"
GetAllDetailsyArr[Arr[1]] .= (PropValue ? PropValue : Arr[1]) "`n"
; GetAllDetailszArr[Arr[1]] .= (PropName ? PropName : Arr[1]) ": " (PropValue ? PropValue : Arr[1]) "`n"
GetGpsDataALLArr[Arr[1]] .= (PropName ? PropName : Arr[1]) ": " (PropValue ? PropValue : Arr[1]) "`n"
}}
;---------------------------------------------------------------------------------------------------------------------------------------------
/*
Loop % counter.MaxIndex()
MsgBox % "ID:`n" counter[A_Index] "`n`t"
. "Maps Pic URL:`n" MapsPicArr[counter[A_Index]] "`n`t"
. "Maps Navi URL:`n" MapsCallArr[counter[A_Index]] "`n`t"
. "KoordinatenA:`n" KoordinatenFuerSortaArr[counter[A_Index]] "`n`t"
. "KoordinatenB:`n" KoordinatenFuerSortbArr[counter[A_Index]] "`n`t"
. "Quelle:`n" FileNameArr[counter[A_Index]] "`n`t"
. "Quelle FileName:`n" yFileName(FileNameArr[counter[A_Index]]) "`n`t"
. "Ziel FileName:`n" yFileName(FileZielArr[counter[A_Index]]) "`n`t"
. "Ziel:`n" FileZielArr[counter[A_Index]] "`n`n"
. GetGpsDataALLArr[counter[A_Index]] "`n"
; . GetAllDetailszArr[counter[A_Index]] "`n"
; . GetGpsDatazArr[counter[A_Index]] "`n"
. "Aufnahmedatum: " Aufnahmedatum
*/
/*
Ergebnis der MsgBox:
---------------------------
FotoContentGpsSortiert V3 .ahk
---------------------------
ID:
E29EA86D3DE41EBA638759CD2057D5C5
Maps Pic URL:
https://www.google.com/maps/vt/data=-V9-TK0q6WAaz3IsV0GA0ycLYcOMQ0PNNJEBUA_q3uRXBE7ewg9PGjtxTWmuevN_hAz23l4WgP6IFdB-vocHhp9VpY1XHnAH4NH8xm0tzABYaxJeJi6TbfDh_jQk7JSg6y5P2ddetR6FS0jrTxuEnTA5yLH3RkoJqxPKDNJPt_M
Maps Navi URL:
https://www.google.com/maps/place/50%C2%B019'54.0%22N+6%C2%B056'24.6%22E
KoordinatenA:
https://www.google.com/search?q=50%C2%B019'54.0%22N+6%C2%B056'24.6%22E
KoordinatenB:
[email protected]
Quelle:
C:\Users\Administrator\Desktop\GPS Foto Content\original\017.JPG
Quelle FileName:
017.JPG
Ziel FileName:
2011.Juni.3--07.07.22--017.JPG
Ziel:
C:\Users\Administrator\Desktop\GPS Foto Content\2011\Juni\3\2011.Juni.3--07.07.22--017.JPG
Latitude: 50.000000, 19.000000, 54.000000
LatitudeDenominator: 1, 1, 10000
LatitudeNumerator: 50, 19, 539999
LatitudeRef: N
Longitude: 6.000000, 56.000000, 24.600000
LongitudeDenominator: 1, 1, 10000
LongitudeNumerator: 6, 56, 245999
LongitudeRef: E
Abmessungen: 2897 x 539
Art: Bild
Attribute: A
Aufnahmedatum: 03.06.2011 07:07
Ausrichtung: Normal
Besitzer: User\Administrator
Bewertung: Nicht bewertet
Bittiefe: 24
Breite: 2897 Pixel
Computer: User (dieser PC)
Dateierweiterung: .JPG
Dateiname: 017.JPG
Elementtyp: JPG-Datei
Erfassungsdatum: 03.06.2011 07:37
ErkannterTyp: Bild
Erstelldatum: 11.10.2020 02:03
EXIFVersion: 221
FreierSpeicherplatz: 669 MB
Freigabestatus: Privat
Freigegeben: Nein
Gesamtgröße: 28,2 GB
Größe: 289 KB
HorizontaleAuflösung: 72 dpi
Höhe: 539 Pixel
LetzterZugriff: 15.10.2020 08:30
Name: 017.JPG
Ordner: original (C:\Benutzer\Administrator\Desktop\GPS Foto Content)
Ordnername: original
Ordnerpfad: C:\Benutzer\Administrator\Desktop\GPS Foto Content\original
Pfad: C:\Benutzer\Administrator\Desktop\GPS Foto Content\original\017.JPG
Programmname: Photosynth
Typ: JPG-Datei
Verknüpfungsstatus: Nicht aufgelöst
VertikaleAuflösung: 72 dpi
VerwendeterSpeicherplatz: 97%
Änderungsdatum: 03.06.2011 07:07
---------------------------
OK
---------------------------
*/
yFileName(x){
x := StrSplit(x, "\")
While, x.MaxIndex()
Return x.Pop()
}
;/*
Gui, Add, ListView , w650 r20 gActionListView, ID|Erfassungsdatum|GEO|FileName Quelle|Programmname|BildMap
Gui +Resize
ImageListID := IL_Create(10) ; Erstellt eine ImageList für 10 kleine Symbole.
LV_SetImageList(ImageListID) ; Weist die obige ImageList der aktuellen ListView zu.
IL_Add(ImageListID, "shell32.dll", 59)
;Loop 10 ; Fügt Reihen in die ListView ein (für jedes Symbol eine Reihe).
; LV_Add("Icon" . 59, 59, "n/a")
;Gui, Add, Button, Default gButtonOrdnerLaden, Ordner laden
;Gui, Add, Button, x+20 gButtonLeeren, Liste leeren
;Gui, Add, Button, x+20, Ansicht wechseln
Loop % counter.MaxIndex()
LV_Add("", counter[A_Index]
, Erfassungsdatum
, KoordinatenFuerSortbArr[counter[A_Index]]
, yFileName(FileNameArr[counter[A_Index]])
, Programmname
; , yFileName(FileZielArr[counter[A_Index]])
, MapsPicArr[counter[A_Index]])
LV_ModifyCol()
LV_ModifyCol(1, 0)
LV_ModifyCol(2, 100)
LV_ModifyCol(3, 130)
LV_ModifyCol(4, 170)
LV_ModifyCol(5, 170)
LV_ModifyCol(6, 50)
Gui, Show, , Bilder GPS Data
ButtonLeeren:
ButtonOrdnerLaden:
Return
;*/
/*
; res := GetGpsDataDetails(MapsPicArr["E29EA86D3DE41EBA638759CD2057D5C5"])
;https://ahkde.github.io/docs/commands/ListView.htm#LV_GetText
;https://ahkde.github.io/docs/commands/ListView.htm
Loop % LV_GetCount()
{
LV_GetText(AbgerufenerText, A_Index)
if InStr(AbgerufenerText, "beliebiger Filtertext")
LV_Modify(A_Index, "Select") ; Markiert jede Reihe, die im ersten Feld den Filtertext enthält.
;------------------
Gui +LastFound
Loop % LV_GetCount("Column")
{
SendMessage, 4125, A_Index - 1, 0, SysListView321 ; 4125 ist LVM_GETCOLUMNWIDTH.
MsgBox Die Spalte %A_Index% hat eine Breite von %ErrorLevel%.
}
;------------------
Reihennummer := 0 ; Veranlasst den ersten Schleifendurchlauf, die Suche am Anfang der Liste zu beginnen.
Loop
{
Reihennummer := LV_GetNext(Reihennummer) ; Setzt die Suche bei der nächsten Reihe fort.
if not Reihennummer ; Oben wurde null zurückgegeben, also gibt es keine weiteren ausgewählten Reihen.
break
LV_GetText(Text, Reihennummer)
MsgBox Die nächste ausgewählte Reihe ist #%Reihennummer%, die im ersten Feld "%Text%" enthält.
}
;------------------
;Das nächste Beispiel ist eine alternative Methode, mit der man herausfinden kann, ob eine bestimmte Reihennummer abgehakt ist:
Gui +LastFound
SendMessage, 4140, Reihennummer - 1, 0xF000, SysListView321 ; 4140 ist LVM_GETITEMSTATE. 0xF000 ist LVIS_STATEIMAGEMASK.
IstAbgehakt := (ErrorLevel >> 12) - 1 ; Setzt IstAbgehakt auf 1 (true), wenn Reihennummer abgehakt ist, ansonsten auf 0 (false).
;------------------
;LV_GetText
;Ruft den Text ab, der auf der angegebenen Reihennummer und Spaltennummer zu finden ist, und speichert ihn in AusgabeVar.
LV_GetText(AusgabeVar, Reihennummer , Spaltennummer)
;------------------
;------------------
*/
ActionListView:
if (A_GuiEvent = "DoubleClick")
{
LV_GetText(BildUrl, A_EventInfo)
;MsgBox % A_EventInfo "`n" MapsPicArr[BildUrl]
Run % MapsPicArr[BildUrl]
Sleep, 2000
Run % FileNameArr[BildUrl]
}
if (A_GuiEvent = "^DoubleClick")
{
LV_GetText(BildUrl, A_EventInfo)
Run % FileNameArr[BildUrl]
}
return
GuiContextMenu: ; Startet, wenn man einen Rechtsklick macht oder die MENÜ-Taste drückt.
if (A_GuiControl != "MeineListView") ; Diese Überprüfung ist optional. Sie zeigt das Menü nur an, wenn Klicks innerhalb der ListView gemacht werden.
return
; Zeigt das Menü bei den Koordinaten A_GuiX und A_GuiY an. Diese Koordinaten
; sind auch dann korrekt, wenn der Benutzer die MENÜ-Taste drückt:
Menu, MeinKontextmenü, Show, %A_GuiX%, %A_GuiY%
return
GuiClose:
ExitApp
Return
;GuiControl, -Redraw, MeineListView
;GuiControl, +Redraw, MeineListView
;-------------------------------------------
GetAllDetails(filePath) {
MaxGap := 320 ; max 320
AllDetailsArr := Object()
SplitPath,% filePath, fileName, dirPath
Folder := ComObjCreate("Shell.Application").NameSpace(dirPath)
FolderItem := Folder.ParseName(fileName)
Gap := 0
While (Gap < MaxGap)
If (Value := Folder.GetDetailsOf(FolderItem, A_Index - 1))
{
If InStr(Value, "Verfügbar")
Continue
xPropName := StrReplace(Folder.GetDetailsOf(0, A_Index - 1), A_Space, "-")
xPropName := RegExReplace(xPropName,"(*UCP)[^\w\h\.]") ; wichtig, sonst Fehler bei [%PropName% := PropValue]
AllDetailsArr[xPropName] := Value
; AllDetailsArr[Folder.GetDetailsOf(0, A_Index - 1)] := Value
props .= Folder.GetDetailsOf(0, A_Index - 1) ": " Value " `n "
; props .= A_Index - 1 " :`t" Folder.GetDetailsOf(0, A_Index - 1) ":`t" Value " `n "
; props .= A_Index - 1 " : " Value " `n ", Gap := 0
}
Else
Gap++
; Return props
Return AllDetailsArr
}
;-------------------------------------------
GetGpsData(FilePath) {
Local
; Namespace: "System.GPS."
Static GpsProps := ["Altitude" , "AltitudeDenominator" , "AltitudeNumerator"
, "AltitudeRef" , "AreaInformation" , "Date"
, "DestBearing" , "DestBearingDenominator" , "DestBearingNumerator"
, "DestBearingRef" , "DestDistance" , "DestDistanceDenominator"
, "DestDistanceNumerator" , "DestDistanceRef" , "DestLatitude"
, "DestLatitudeDenominator" , "DestLatitudeNumerator" , "DestLatitudeRef"
, "DestLongitude" , "DestLongitudeDenominator" , "DestLongitudeNumerator"
, "DestLongitudeRef" , "Differential" , "DOP"
, "DOPDenominator" , "DOPNumerator" , "ImgDirection"
, "ImgDirectionDenominator" , "ImgDirectionNumerator" , "ImgDirectionRef"
, "Latitude" , "LatitudeDecimal" , "LatitudeDenominator"
, "LatitudeNumerator" , "LatitudeRef" , "Longitude"
, "LongitudeDecimal" , "LongitudeDenominator" , "LongitudeNumerator"
, "LongitudeRef" , "MapDatum" , "MeasureMode"
, "ProcessingMethod" , "Satellites" , "Speed"
, "SpeedDenominator" , "SpeedNumerator" , "SpeedRef"
, "Status" , "Track" , "TrackDenominator"
, "TrackNumerator" , "TrackRef" , "VersionID"]
SplitPath, FilePath, FileName , FileDir
If (FileDir = "")
FileDir := A_WorkingDir
Props := {}
If (SFI := ComObjCreate("Shell.Application").NameSpace(FileDir).ParseName(FileName)) {
For Each, PropName In GpsProps {
PropVal := SFI.ExtendedProperty("System.GPS." . PropName)
If IsObject(PropVal) {
If (ComObjType(PropVal) & 0x2000) { ; VT_ARRAY
Values := ""
For Value In PropVal
Values .= Value . ", "
Props[PropName] := RTrim(Values, ", ")
}
}
Else If (PropVal <> "")
Props[PropName] := PropVal
}
}
Return Props
}
;-------------------------------------------
/*
MsgBox % counter[1] "`n`n" MapsPicArr["E29EA86D3DE41EBA638759CD2057D5C5"]
MsgBox % counter[2] "`n`n" MapsPicArr["4D5BA5807538F20F22447CB2865FC894"]
MsgBox % counter[3] "`n`n" MapsPicArr["5C1548941B721514241F1196B1974030"]
MsgBox % counter[1] "`n`n" MapsPicArr[counter[1]]
MsgBox % counter[2] "`n`n" MapsPicArr[counter[2]]
MsgBox % counter[3] "`n`n" MapsPicArr[counter[3]]
Loop % Arr.Length()+1
MsgBox % counter[A_Index] "`n`n"
. MapsPicArr[counter[A_Index]] "`n`n"
. MapsCallArr[counter[A_Index]] "`n`n"
. FileNameArr[Counter[A_Index]]
*/