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 

MSN Infobox

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



Anmeldedatum: 25.09.2007
Beiträge: 29

BeitragVerfasst am: Fr Apr 25, 2008 4:46 pm    Titel: MSN Infobox Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 605
Wohnort: Deutschland

BeitragVerfasst am: Fr Apr 25, 2008 5:49 pm    Titel: Antworten mit Zitat

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. Wink
Code:
msnbox(msnbox_title, msnbox_text, msnbox_showtime = 3, msnbox_guicount = 10)

_________________
Mit freundlichen Grüßen
fredchf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Manni



Anmeldedatum: 25.09.2007
Beiträge: 29

BeitragVerfasst am: Fr Apr 25, 2008 10:53 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
fredchf



Anmeldedatum: 18.09.2006
Beiträge: 605
Wohnort: Deutschland

BeitragVerfasst am: Sa Apr 26, 2008 12:12 am    Titel: Antworten mit Zitat

hallo manni,
die defaults finde ich auch ganz praktisch! Smile

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. Wink
_________________
Mit freundlichen Grüßen
fredchf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chucky



Anmeldedatum: 07.01.2006
Beiträge: 576
Wohnort: Powerland

BeitragVerfasst am: Sa Apr 26, 2008 2:54 pm    Titel: Antworten mit Zitat

Nett gemacht Cool

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 Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AGU
Gast





BeitragVerfasst am: So Apr 27, 2008 2:33 am    Titel: Antworten mit Zitat

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

BeitragVerfasst am: So Apr 27, 2008 7:36 am    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Manni



Anmeldedatum: 25.09.2007
Beiträge: 29

BeitragVerfasst am: Di Apr 29, 2008 4:30 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 947
Wohnort: Berlin

BeitragVerfasst am: Mi Apr 30, 2008 6:34 am    Titel: Antworten mit Zitat

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
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