 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Manni
Anmeldedatum: 25.09.2007 Beiträge: 29
|
Verfasst am: Fr Apr 25, 2008 4:46 pm Titel: MSN Infobox |
|
|
Hi,
ich habs nun doch geschafft, nach einem starken Rückschlag in Form eines Virus mit Partitions-zerstörer. Hab alles verloren.
Hier ist: Mannis MSN Info Box
Call: | Code: | | msnbox("titel", "text", anzeigezeit, guicount) |
Titel:
Der Titel der angezeigt werden soll. "" Nicht vergessen!!!
Text:
Der Text der in der Box stehen soll. "" Nicht vergessen!!!
Anzeigezeit:
Die Zeit, wie lange die Box angezeigt wird. In Sekunden!
GuiCount:
1 - 99 um zuverhindern das sich der Funktion mit deinem Programm in die Quere kommt.
| Code: | ;##############################################
;# #
;# Autor: Manni #
;# #
;# Sprache: Deutsch #
;# #
;# Web: Comming Soon #
;# #
;##############################################
;# Thx an fredchf für den Defaults Tip
msnbox(msnbox_title, msnbox_text, msnbox_showtime = 3, msnbox_guicount = 90)
{
; Deklariere Variablen. Keine Ahnung warum. Kam Fehler also hab ichs gemacht
global msnbox_text_box
global msnbox_state
global msnbox_test
close := 0
; Bereite Count für GuiCount vor
num := msnbox_guicount ":"
; Prüfe ob schonmal angezeigt
If msnbox_test <> 1
{
Gui, %num% +ToolWindow +AlwaysOnTop +LabelMSNBox
Gui,%num% Add, Text, x6 y0 w180 h110 vmsnbox_text_box, asd
msnbox_test = 1
}
GuiControl,%num%, msnbox_text_box, %msnbox_text%
; Berechne Höhe und Breite für Show und Hide effekt
breite = %A_ScreenWidth%
h1 := A_ScreenHeight
EnvSub, h1, 50 ; Abzug Taskleiste
EnvSub, breite, 200
Gui,%num% Show,x%breite% y%h1% h120 w200, %msnbox_title%
; Animation
Loop, 12
{
EnvSub, h1, 10
WinMove,%msnbox_title%,, %breite%,%h1%
}
; Bereite Sekunden-Zähler vor
Sek := A_Sec + msnbox_showtime
If Sek > 60
EnvSub, Sek, 60
SetTimer, showtime, 100
SetTimer, showtime, On
Loop
{
If A_GuiX <> %breite%
WinMove,%msnbox_title%,, %breite%,%h1%
If A_GuiY <> %h1%
WinMove,%msnbox_title%,, %breite%,%h1%
If close = 1
{
Loop, 12
{
EnvAdd, h1, 10
WinMove,%msnbox_title%,, %breite%,%h1%
}
Gui, %num% Cancel
Break
}
}
showtime:
If Sek = %A_Sec%
close := 1
return
MSNBoxClose:
close := 1
return
} |
Ich bin für jeden Verbesserungsvorschlag offen.
Gruß
Manni
Zuletzt bearbeitet von Manni am Fr Apr 25, 2008 10:59 pm, insgesamt 2-mal bearbeitet |
|
| Nach oben |
|
 |
fredchf
Anmeldedatum: 18.09.2006 Beiträge: 605 Wohnort: Deutschland
|
Verfasst am: Fr Apr 25, 2008 5:49 pm Titel: |
|
|
hallo manni,
dein script gefällt mir ganz gut,was hälts du von defaults für msnbox_showtime und msnbox_guicount.dann müssen sie nicht mehr übergeben werden.
| Code: | | msnbox(msnbox_title, msnbox_text, msnbox_showtime = 3, msnbox_guicount = 10) |
_________________ Mit freundlichen Grüßen
fredchf |
|
| Nach oben |
|
 |
Manni
Anmeldedatum: 25.09.2007 Beiträge: 29
|
Verfasst am: Fr Apr 25, 2008 10:53 pm Titel: |
|
|
Hi,
Das nehm ich mit rein. Ich mach bei guicount 90, weil ich nicht glaube das jemand 90 verschiedene Guis in einem script hat.
wiedermal etwas dazu gelernt. Das mit den Defaults wusste ich nochnicht. Ich hab das zwar immer wieder in anderen funktionen gesehen, wusste aber nie etwas damit anzufangen.
Ich habe auch versucht, die Höhe der Taskleiste automatisch miteinzubeziehen. Die Taskleiste ist laut WindowSpy 30 Pixel hoch. Wenn ich jedoch die ScreenHeight - 30 berechne ist mein Gui auf höhe der Uhr. Vielleicht hab ich die falsche höhe.
Gruß
Manni |
|
| Nach oben |
|
 |
fredchf
Anmeldedatum: 18.09.2006 Beiträge: 605 Wohnort: Deutschland
|
Verfasst am: Sa Apr 26, 2008 12:12 am Titel: |
|
|
hallo manni,
die defaults finde ich auch ganz praktisch!
| Zitat: | | Ich habe auch versucht, die Höhe der Taskleiste automatisch miteinzubeziehen. Die Taskleiste ist laut WindowSpy 30 Pixel hoch. Wenn ich jedoch die ScreenHeight - 30 berechne ist mein Gui auf höhe der Uhr. Vielleicht hab ich die falsche höhe. |
die fensterposition bezieht sich auf die linke obere ecke der gui,also musst du deine gui-höhe noch mit abziehen.  _________________ Mit freundlichen Grüßen
fredchf |
|
| Nach oben |
|
 |
Chucky
Anmeldedatum: 07.01.2006 Beiträge: 576 Wohnort: Powerland
|
Verfasst am: Sa Apr 26, 2008 2:54 pm Titel: |
|
|
Nett gemacht
| Manni hat Folgendes geschrieben: | | Code: | ; Deklariere Variablen. Keine Ahnung warum. Kam Fehler also hab ichs gemacht
global msnbox_text_box
|
| Beim Verlassen einer Funktion werden ja alle lokalen Variablen dieser Funktion - also die, die nicht Static oder Global sind - gelöscht.
Eine Variable eines Controls darf bei AutoHotkey aber nicht verschwinden, muß also explizit als Static oder Global definiert werden, wenn sie in einer Funktion erzeugt wurde.
Bei außerhalb von Funktionen erstmals-verwendeten-und-damit-automatisch-definierten Variablen ist dies nicht nötig, sie sind dort sowieso Global.
In den meisten anderen Programmiersprachen muß man Variablen vor der ersten Benutzung extra definieren.
__________________________________________
Created with BBCodeWriter 7.0 - the one and only  |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: So Apr 27, 2008 2:33 am Titel: |
|
|
| Zitat: | | Ich habe auch versucht, die Höhe der Taskleiste automatisch miteinzubeziehen. Die Taskleiste ist laut WindowSpy 30 Pixel hoch. Wenn ich jedoch die ScreenHeight - 30 berechne ist mein Gui auf höhe der Uhr. Vielleicht hab ich die falsche höhe. | Soviel ich weiß, lässt sich die Höhe der Taskleiste über den SysGet Befehl ermitteln.
| Code: | SysGet, Area, MonitorWorkArea
MsgBox, Left: %AreaLeft% -- Top: %AreaTop% -- Right: %AreaRight% -- Bottom %AreaBottom% |
Wenn man per SysGet die WorkArea ermittelt, und die von A_ScreenHeight subtrahiert, sollte man doch die Taskbarhöhe ermitteln können, oder nicht?
Allerdings habe ich gelesen, das es Schwierigkeiten gibt, wenn die Taskleiste so konfiguriert ist, das sie sich bei Nichtgebrauch ausblendet.
___________________
Gruß AGU |
|
| Nach oben |
|
 |
denick
Anmeldedatum: 15.09.2006 Beiträge: 947 Wohnort: Berlin
|
Verfasst am: So Apr 27, 2008 7:36 am Titel: |
|
|
Moin,
| Code: | #NoEnv
WinGetPos, TX, TY, TW, TH, ahk_class Shell_TrayWnd
MsgBox, 0, Message,
(
Taskleiste:
X:`t%TX%
Y:`t%TY%
W:`t%TW%
H:`t%TH%
)
ExitApp |
_________________ Hilfe zur Hilfe
(de)nick |
|
| Nach oben |
|
 |
Manni
Anmeldedatum: 25.09.2007 Beiträge: 29
|
Verfasst am: Di Apr 29, 2008 4:30 pm Titel: |
|
|
Hi,
ich hab alles probiert, aber es funktioniert nicht.
Der Boden der Box ist immer auf höhe der Uhr. Laut meiner berechnung ist die Taskleiste 30 Pixel hoch. In dem vorherigen Code war die Box aber erst nach 50 über der TaskLeiste.
Schaut es euch am besten mal selber an. Ich habe den Code angepasst:
Das veränderete habe ich mit #### markiert
| Code: | ;##############################################
;# #
;# Autor: Manni #
;# #
;# Sprache: Deutsch #
;# #
;# Web: Comming Soon #
;# #
;##############################################
msnbox(msnbox_title, msnbox_text, msnbox_showtime = 3, msnbox_guicount = 90)
{
; Deklariere Variablen
global msnbox_text_box
global msnbox_state
global msnbox_test
close := 0
; Bereite Count für GuiCount vor
num := msnbox_guicount ":"
If msnbox_test <> 1
{
Gui, %num% +ToolWindow +AlwaysOnTop +LabelMSNBox
Gui,%num% Add, Text, x6 y0 w180 h110 vmsnbox_text_box, asd
msnbox_test = 1
}
GuiControl,%num%, msnbox_text_box, %msnbox_text%
; Berechne Höhe und Breite für Show und Hide effekt
;##########################################################
SysGet, Area, MonitorWorkArea
breite := A_ScreenWidth
h1 := AreaBottom
EnvSub, breite, 200 ; Abzug breite (msgbox)
Gui,%num% Show,x%breite% y%h1% h120 w200, %msnbox_title%
;##########################################################
; Animation
Loop, 12
{
EnvSub, h1, 10
WinMove,%msnbox_title%,, %breite%,%h1%
}
Sek := A_Sec + msnbox_showtime
If Sek > 60
EnvSub, Sek, 60
SetTimer, showtime, 500
SetTimer, showtime, On
Loop
{
If A_GuiX <> %breite%
WinMove,%msnbox_title%,, %breite%,%h1%
If A_GuiY <> %h1%
WinMove,%msnbox_title%,, %breite%,%h1%
If close = 1
{
Loop, 12
{
EnvAdd, h1, 10
WinMove,%msnbox_title%,, %breite%,%h1%
}
Gui, %num% Cancel
Break
}
}
showtime:
If Sek = %A_Sec%
close := 1
return
MSNBoxClose:
close := 1
return
} |
Gruß
Manni |
|
| Nach oben |
|
 |
denick
Anmeldedatum: 15.09.2006 Beiträge: 947 Wohnort: Berlin
|
Verfasst am: Mi Apr 30, 2008 6:34 am Titel: |
|
|
Moin Manni,
mit Gui,%num% Show,x%breite% y%h1% h120 w200, %msnbox_title% bestimmst Du Höhe und Breite des "inneren" Bereichs der Gui, d.h. Höhe bzw. Breite der Titelleiste und der Rahmen werden nicht berücksichtigt. Die tatsächliche Höhe der Gui ist deshalb 120 + Höhe der Titelleiste + Rahmenhöhe.
WinMove,%msnbox_title%,, %breite%,%h1% orientiert sich aber an den Außenseiten der Gui inklusive Titelleiste und Rahmen. Du must deren Höhe deshalb einbeziehen.
Das geht z.B. so:
| Code: | #NoEnv
num := "20:"
msnbox_title := "Test Gui"
; WorkArea bestimmen
SysGet, Area, MonitorWorkArea
; Gui verborgen aufbauen
Gui,%num% +LabelMSNGui
Gui,%num%Show, Hide h120 w200, %msnbox_title%
; "LastFoundWindow" für Win-Anweisungen setzen
Gui,%num% +LastFound
; Tatsächliche Dimensionen der Gui bestimmen
WinGetPos, X, Y, W, H
; Startposition der Gui bestimmen
X := A_ScreenWidth - W
Y := AreaBottoM
; Minimale Y-Position bestimmen
YMin := AreaBottom - H
; Gui auf Startposition anzeigen
Gui,%num%Show, x%X% y%Y%
; Gui einblenden
Loop
{
; Die folgenden Anweisungen sorgen für eine beschleunigte Anweisungs-
; ausführung. Die Gui kann damit "weicher" eingeblendet werden:
O_BatchLines := A_BatchLines ; Aktuelle Einstellungen merken
O_WinDelay := A_WinDelay
SetBatchLines, 0
SetWinDelay, 0
EnvSub, Y, 1
If Y < %YMin% ; Minimale Y-Position erreicht ?
{
SetBatchLines, %O_BatchLines% ; Frühere Einstellungen wiederherstellen
SetWinDelay, %O_WinDelay%
Break
}
WinMove, , , , Y
}
Return
MSNGuiClose:
ExitApp |
_________________ Hilfe zur Hilfe
(de)nick |
|
| Nach oben |
|
 |
|
|
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
|