Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

TechDemo: Diagramm

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
denick



Anmeldedatum: 15.09.2006
Beiträge: 947
Wohnort: Berlin

BeitragVerfasst am: Fr Mai 09, 2008 7:31 am    Titel: TechDemo: Diagramm Antworten mit Zitat

Moin,

ich habe mich wegen Arrow fredchf's Anfrage mit dem Thema Diagramme und AHK beschäftigt. Nach einigen Irrungen und Wirrungen habe ich mich dann für diese Lösung entschieden. Ich habe mich auch mit dem Versuch beschäftigt, das Ganze in eine Funktion zu gießen, bin aber wieder davon abgekommen, weil mir meine Ansätze entweder zu unflexibel oder mit der Übergabe zu vieler Parameter verbunden waren. Wer will, kann es ja selbst versuchen. Wink

So ist das folgende Skript eine Demo, die jeder bei Bedarf auf eigene Belange anpassen muss. Es funktioniert auf Basis von 1-pixligen farbigen PNG-Dateien im Skriptverzeichnis, die man z.B. recht einfach mit MS Paint oder dem MS Photo Editor erstellen kann. Eine vorgefertigte Sammlung der HTML-Farben kann man hier Arrow HTML Farben als ZIP herunterladen.

Diagramm.ahk:
Code:
#NoEnv
SetBatchLines, -1

; Entnommen aus fredchf's Beispiel unter
; http://de.autohotkey.com/forum/post-23784.html#23784
; ######################################
; hier kommt nur noch meine messreihe
; typische messreihe
; #####################################
zu_testzwecken:
messreihe =
(
1;113,2813
2;177,7344
3;178,7109
4;180,6641
5;179,6875
6;181,6406
7;181,6406
8;183,5938
9;185,5469
10;186,5234
11;187,5
12;189,4531
13;191,4063
14;195,3125
15;199,2188
16;202,1484
17;206,0547
18;208,0078
19;208,9844
20;210,9375
21;213,8672
22;215,8203
23;216,7969
24;219,7265
25;222,6563
26;227,5391
27;230,4688
28;234,375
29;239,2578
30;244,1406
31;247,0703
32;250
33;252,9297
34;254,8828
35;259,7656
36;262,6953
37;264,6484
38;270,5078
39;271,4844
40;273,4375
41;274,4141
42;279,2969
43;283,2031
44;286,1328
45;288,0859
46;289,0625
47;295,8984
48;295,8984
49;301,7578
50;303,7109
51;307,6172
52;311,5234
53;314,4531
54;317,3828
55;320,3125
56;326,1719
57;330,0781
58;331,0547
59;333,0078
60;336,9141
61;338,8672
62;340,8203
63;343,75
64;347,6563
65;351,5625
66;356,4453
67;359,375
68;366,2109
69;366,2109
70;371,0938
71;375
72;374,0234
73;379,8828
74;384,7656
75;388,6719
76;388,6719
77;389,6484
78;392,5781
79;395,5078
80;396,4843
81;399,414
82;405,2734
83;407,2266
84;412,1094
85;414,0625
86;417,9687
87;420,8984
88;417,9687
89;417,9687
90;416,9922
91;418,9453
92;419,9219
93;436,5235
94;458,9843
95;474,6094
96;481,4453
97;487,3047
98;488,2812
99;500
100;503,9063
101;500
102;510,7422
103;507,8125
104;513,6719
105;515,625
106;526,3672
107;529,2969
108;532,2266
109;540,0391
110;544,9219
111;554,6875
112;556,6406
113;558,5938
114;567,3828
115;568,3594
116;576,1719
117;578,125
118;588,8671
119;591,7969
120;598,6328
121;602,5391
122;610,3516
123;619,1406
124;625
125;626,9531
126;634,7656
127;636,7188
128;640,6249
129;639,6484
130;651,3672
131;656,25
132;662,1093
133;660,1563
134;666,0156
135;674,8047
136;679,6875
137;685,5469
138;698,2422
139;706,0547
140;699,2188
141;713,8671
142;715,8203
143;722,6563
144;727,5391
145;734,375
146;739,2578
147;744,1406
148;751,9531
149;757,8125
150;764,6484
151;769,5312
152;776,3672
153;780,2735
154;785,1563
155;792,9687
156;795,8984
157;800,7813
158;803,7109
159;811,5234
160;814,4531
161;814,4531
162;823,2422
163;830,0781
164;832,0313
165;833,0079
166;841,7968
167;849,6094
168;856,4453
169;858,3984
170;855,4688
171;855,4688
172;859,3751
173;860,3516
174;877,9297
175;870,1172
176;967,7734
177;937,5
178;884,7656
179;891,6015
180;881,8359
181;898,4375
182;895,5079
183;894,5313
184;897,4609
185;907,2266
186;898,4375
187;905,2734
188;900,3906
189;0
190;0
191;0
192;0
193;0
194;0
195;0
196;0
197;0
198;0
199;0
200;30,27344
201;0
202;0
203;0
204;0
205;0
206;0
207;0
208;0
209;0
210;0
211;0
212;0
213;0
214;0
215;0
216;0
217;0
218;0
219;0
220;0
221;0
222;0
223;0
224;0
225;0
226;0
227;0
228;0
229;0
230;0
231;0
232;0
233;0
234;0
235;0
236;0
237;0
238;0
239;0
240;0
241;0
242;0
243;0
244;0
245;0
246;0
247;0
248;0
249;0
250;0
)
; Fontsize
FS := 8
; Breite (W) und Höhe (H) des Diagrammfeldes
DW := 1000  ; Achtung: DW muss ein Vielfaches der Wertemenge sein
DH := 600
; Höchster (H) und niedrigster (L) anzuzeigender Wert
YH := 1200
YL := 0
; Beschriftungen für Y- und X-Achse
YScaler := "1200|1100|1000|900|800|700|600|500|400|300|200|100| "
XScaler := " |50|100|150|200|250"
; Ränder
XM := 10
YM := 10
; Beschriftung der Y-Achse auswerten
StringSplit, TY, YScaler, |
YD := DH // (TY0 - 1)
YZ := TY0
YT := ""
Loop, %TY0% {
   If (StrLen(TY%A_Index%) > StrLen(YT)) {
      YT := TY%A_Index%
   }
}
; Beschriftung der X-Achse auswerten
StringSplit, TX, XScaler, |
XD := DW // (TX0 - 1)
XZ := TX0
XT := ""
Loop, %TX0% {
   If (StrLen(TX%A_Index%) > StrLen(XT)) {
      XT := TX%A_Index%
   }
}
; Feldbreiten und -höhen ermitteln
Gui, Font, s%FS%, Courier New
Gui, Add, Text, Right vTY, %YT%
Gui, Add, Text, Center vTX, %XT%
GuiControlGet, TY, Pos
GuiControlGet, TX, Pos
Gui, Destroy
; Gui aufbauen
Gui, Margin, 10, 10
Gui, Font, s%FS%, Courier New
; Beschriftung der Y-Achse
Y := YM - (TYH // 2)
X := XM
Loop, %YZ% {
   Gui, Add, Text, x%X% y%Y% w%TYW% h%TYH% Right 0x200, % TY%A_Index%
   Y += YD
}
; Diagrammhintergrund
X := XM + TYW + FS
Y := YM - 1
Gui, Add, Pic, x%X% y%Y% w%DW% h%DH% E0x200 vBG, Silver.png
GuiControlGet, BG, Pos
; Diagramm
PD := (BGW - DW) // 2
PX := BGX + PD
PW := DW // 250
PF := DH / YH
Loop, Parse, messreihe, `n
{
   StringSplit, T, A_LoopField, `;
   StringReplace, T2, T2, `,, .
   If (T2 <= YL) {
      PX += PW
      Continue
   }
   PH := Round(T2 * PF)
   PY := BGY + PD + DH - PH
   Gui, Add, Pic, x%PX% y%PY% w%PW% h%PH% vPIC%A_Index% gPIC, Navy.png
   V%A_Index% := T2
   PX += PW
}
; Gitterraster
; Zufallsergebnis, ich hatte einfach die Dateinamen vergessen ;-)
; Man kann die Linien aber auch einfärben
X := BGX + PD
Y := BGY + PD
Loop, % YZ - 1 {
   Y += YD
   Gui, Add, Pic, x%X% y%Y% w%DW% h1
}
X := BGX + PD
Y := BGY + PD
Loop, % XZ - 1 {
   X += XD
   Gui, Add, Pic, x%X% y%Y% w1 h%DH%
}
; Beschriftung der X-Achse
X := BGX - (TXW // 2)
Y := BGY + BGH + (TXH // 2)
Loop, %XZ% {
   Gui, Add, Text, x%X% y%Y% w%TXW% h%TXH% Center, % TX%A_Index%
   X += XD
}
Gui, Show, , Diagramm
Return
; ------------------------------------------------------------------------------
PIC:
I := SubStr(A_GuiControl, 4)
ToolTip, % V%I%
KeyWait, LButton
ToolTip
Return
; ------------------------------------------------------------------------------
GuiClose:
GuiEscape:
ExitApp

Viel Spaß beim Probieren!

Sollte irgendwo eine ähnliche Lösung zu finden sein, bitte ich den Autor schon vorab um Verzeihung. Ich habe sie nicht gefunden. Wink
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Z Gecko
Gast





BeitragVerfasst am: Fr Mai 09, 2008 8:09 am    Titel: Antworten mit Zitat

Wirklich hübsch, insbesondere das Gitter.
Für ganz einfache Werte hätte man es auch mit Progress-Bars machen können http://www.autohotkey.com/forum/topic16787.html, aber so kann man ja gleich mehrere "messreihen" gleichzeitig darstellen. Super.
Nach oben
denick



Anmeldedatum: 15.09.2006
Beiträge: 947
Wohnort: Berlin

BeitragVerfasst am: Fr Mai 09, 2008 11:43 am    Titel: Antworten mit Zitat

Moin Z Gecko,

ich hatte es auch erst mit Progressbars versucht, ohne Deinen Thread gefunden zu haben. Mein Skript sah Deinem zwangsweise in Teilen recht ähnlich.

Doch, wie Du ja selbst weißt, haben die so ihre Tücken. Bei einer Breite < 3 oder = 4 zeigen sie nichts an, und das begrenzt die vertikale Auflösung ziemlich stark. Mit den Pictures kann man bis auf 1 Pixel Breite heruntergehen und hat so mehr Möglichkeiten. Allerdings wird die Gesamtzahl der darzustellenden Werte durch die Anzahl der möglichen Gui-Controls begrenzt:
Zitat:
Each GUI window may have up to 11,000 controls. However, use caution when creating more than 5000 controls because system instability may occur for certain control types.


@fredchf:

Moin,

ich bin inzwischen gedanklich etwas weiter. Vielleicht wird es doch noch eine Funktion. Wink
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 605
Wohnort: Deutschland

BeitragVerfasst am: Fr Mai 09, 2008 12:22 pm    Titel: Antworten mit Zitat

hallo denick,
das ist aus meiner sicht nicht unbedingt nötig,da der aufwand,das diagramm in mein script(komplette verwaltung einer datenbank) einzubinden,so oder so ähnlich ist.könnte wohl eher jemandem dienen,der deine darstellung für verschiedene scripte nutzen möchte,oder? Rolling Eyes

EDIT:
ich muss am wochenende leider arbeiten,mal schauen wie weit ich komme... Wink
euch allen ein schönes pfingstwochenende Mr. Green
_________________
Mit freundlichen Grüßen
fredchf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 947
Wohnort: Berlin

BeitragVerfasst am: Mi Mai 21, 2008 6:46 am    Titel: Antworten mit Zitat

Moin Z Gecko,

ich habe auch nochmal mit den Progressbars rumgespielt und einen Ansatz gefunden, der mir schon recht gut gefällt. Ich finde die Pictures aber nach wie vor flexibler und bin deshalb dabei geblieben.

Nichts des zum Trotz:
Code:
#NoEnv
; Werteliste erstellen: Sinuskurve
MX := 361   ; Maximale Wertanzahl
FX := 2     ; Faktor für X-Achse
VL := ""
I := 0
Loop, %MX% {
   VL .= I . "|" . Sin(I * 0.01745329252) . "`n"
   I++
}
VL := SubStr(VL, 1, -1)
; Position und Dimension des Diagramms
XD := 20       ; X-Position
YD := 20       ; Y-Position
WD := MX * FX  ; Breite des inneren Darstellungsbereichs
HD := 360      ; Höhe des inneren Darstelleungsbereichs
; Breite/Höhe eines 3D-Rands ermitteln
SysGet, XB, 45
Sysget, YB, 46
; Und los geht's
Gui, Margin, %XD%, %YD%
; Text zum Klicken drunterlegen
X := XD
Y := YD
W := WD + (XB * 2)
H := HD + (YB * 2)
Gui, Add, Text, x%X% y%Y% w%W% h%H% gKlick
; ProgressBars für Werte
BP := "BackgroundGray"
CP := "cRed"
RP := 1000      ; Wertebereich passend "aufblasen"
XP := XD + XB - 1
YP := YD + YB - 1
HP := HD + 1
StringSplit, V, VL, `n
HL := "|"
Loop, % V0 {
   StringSplit, E, V%A_Index%, |
   Loop, % FX {
      Gui, Add, Progress
         , x%XP% y%YP% h%HP% w3 Vertical %CP% %BP% Range-%RP%-%RP% hwndPID
         , % Round(E2 * RP)
      Control, ExStyle, -0x20000, , ahk_id %PID%
      HL .= PID . ";" . E2 . "|"
      XP++
   }
}
; Rahmen drüberlegen
XR := XD
YR := YD
WR := WD + (XB * 2)
HR := HD + (YB * 2)
Gui, Add, Text, x%XR% y%YR% w%WR% h%HR% E0x200 BackgroundTrans
; Und noch ein Minigrid
XT := XD + XB - 1
YT := YD + YB + (HD // 2) - 1
WT := WD
HT := 1
Gui, Add, Text, x%XT% y%YT% w%WT% h%HT% hwndHID
XT := XD + XB + (WD // 2) - 1
YT := YD + YB - 1
WT := 1
HT := HD
Gui, Add, Text, x%XT% y%YT% w%WT% h%HT% hwndVID
; Fertig
Gui, Show, , Z Gecko's Progress-Diagramm
Return
; ------------------------------------------------------------------------------
GuiClose:
GuiEscape:
ExitApp
; ------------------------------------------------------------------------------
Klick:
MouseGetPos, , , , CTID, 2
If RegExMatch(HL, "S)\|" . CTID . ";([^\|]+)\|", T)
   ToolTip, %T1%
KeyWait, LButton
ToolTip
Return

_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de