Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 07:29

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[AutoIT Frage] Anstatt Gui Fenster ein Tranparentes Bild nehmen?

Discussion on [AutoIT Frage] Anstatt Gui Fenster ein Tranparentes Bild nehmen? within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jul 2010
Posts: 62
Received Thanks: 4
[AutoIT Frage] Anstatt Gui Fenster ein Tranparentes Bild nehmen?

Hey Leute,
Vorweg diese Frage gibts hier noch nicht oder wurde noch nicht beantwortet hab bereits alles durchsucht -.-"
Gut nun zu meiner Frage ist es möglich anstatt des normalen Fensters (Also wenn man mit Koda einfach ne Gui ohne alles erstellt) ein Bild zu verwenden und darauf Buttons usw zu setzen, Aber jetzt kommt das Problem das Bild soll transparent sein, also so wie der Patcher von Heavenmt2 also der neue natürlich
Ist sowas in AutoIt zu machen wenn ja wie?
Wenns nicht geht kann man eine Dll oder sowas in der Art programmieren und in AutoIt einfügen?

Lg .Pancake
Mr. Pancake-Trader is offline  
Old 10/28/2010, 17:19   #2
 
elite*gold: 0
Join Date: May 2008
Posts: 23
Received Thanks: 10
Dafür musst du auf die GDI+ Bibliothek/API zurückgreifen (#include <GDIPlus.au3>) und 2 Fenster erstellen.

Fenster 1 = Hauptfenster und nur für den Hintergrund
Fenster 2 = child-Fenster von Fenster 1 und für labels/buttons etc.

Fenster 2 muss transparent gemacht werden, damit die labels/buttons/... direkt auf dem Hintergrund liegen.

... ein Beispiel:
(zur besseren Lesbarkeit am Besten nach SciTE kopieren)

PHP Code:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>

Global $pngSrcGUIBK "C:\bkg.png"

Hauptfenster für den Hintergrund
$GUI 
GUICreate(""942528, -1, -1$WS_POPUPBitOR($WS_EX_CONTROLPARENT$WS_EX_LAYERED))
_GDIPlus_Startup() ; lade und aktiviere GDI
Global 
$hImageGUIBK _GDIPlus_ImageLoadFromFile($pngSrcGUIBK) ; lade Hintergrunddatei per GDI+
SetBitmap($GUI$hImageGUIBK255) ; setze Alpha vom Fenster des Bildes auf 255 (transparent)


; => 
Fenster für buttons etc.
$GUIsub GUICreate(""942528, -1, -1$WS_POPUPBitOR($WS_EX_LAYERED$WS_EX_MDICHILD), $GUI)
GUISetBkColor(0x585858)    ; => hintergrund ebenfalls durchsichtigdamit die buttons direkt auf das Hintergrundbild gesetzt werden
_WinAPI_SetLayeredWindowAttributes
($GUIsub0x585858)



Func SetBitmap($hGUI$hImage$iOpacity)    ; lade hintergrundbild und mache den hintergrund transparent
    Local $hScrDC
$hMemDC$hBitmap$hOld$pSize$tSize$pSource$tSource$pBlend$tBlend

    $hScrDC 
_WinAPI_GetDC(0)
    
$hMemDC _WinAPI_CreateCompatibleDC($hScrDC)
    
$hBitmap _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    
$hOld _WinAPI_SelectObject($hMemDC$hBitmap)
    
$tSize DllStructCreate($tagSIZE)
    
$pSize DllStructGetPtr($tSize)
    
DllStructSetData($tSize"X"_GDIPlus_ImageGetWidth($hImage))
    
DllStructSetData($tSize"Y"_GDIPlus_ImageGetHeight($hImage))
    
$tSource DllStructCreate($tagPOINT)
    
$pSource DllStructGetPtr($tSource)
    
$tBlend DllStructCreate($tagBLENDFUNCTION)
    
$pBlend DllStructGetPtr($tBlend)
    
DllStructSetData($tBlend"Alpha"$iOpacity)
    
DllStructSetData($tBlend"Format"$AC_SRC_ALPHA)
    
_WinAPI_UpdateLayeredWindow($hGUI$hScrDC0$pSize$hMemDC$pSource0$pBlend$ULW_ALPHA)
    
_WinAPI_ReleaseDC(0$hScrDC)
    
_WinAPI_SelectObject($hMemDC$hOld)
    
_WinAPI_DeleteObject($hBitmap)
    
_WinAPI_DeleteDC($hMemDC)
EndFunc 

GDI+ zu meistern ist aber schon deutlich höhere Kunst als einfach nur ein 0815 GUI per Koda zu erstellen.
Damit kannst du auch Animationen usw. einbinden.
Fuii is offline  
Thanks
1 User
Old 10/28/2010, 17:19   #3
 
elite*gold: 0
Join Date: Jul 2010
Posts: 450
Received Thanks: 78
würde mich auch interresieren...
So könnte man auch ne Transparente Uhr programmieren.
eagly200 is offline  
Old 10/28/2010, 18:10   #4
 
elite*gold: 0
Join Date: Jul 2010
Posts: 62
Received Thanks: 4
@Fuii
Danke dir für deine Hilfe, sowas hab ich gesucht^^
Nur dein Skript funktioniert bei mir nicht so ganz -.-"

## Fehlermeldung ##
PHP Code:
WARNING$AC_SRC_ALPHApossibly used before declaration
ERROR
$AC_SRC_ALPHAundeclared global variable 
Wenn ich die Variable ganz am Anfang als Globale Variable deklariere passiert gar nicht
Vllt. könntest du mir da auch weiterhelfen^^

@eagly200
Nicht nur ne Uhr kannste damit machen^^
Dir steht die ganze Welt damit offen :P (Naja net ganz^^)
Die Programme kommen dann net ganz so billig rüber xD

Greetz
Mr. Pancake-Trader is offline  
Old 10/28/2010, 18:26   #5
 
elite*gold: 0
Join Date: May 2008
Posts: 23
Received Thanks: 10
Ah, mein Fehler.
Die muss vorher natürlich deklariert werden und zwar als Konstante mit dem Wert 1.

Einfach nach den includes, bzw. bei deinen Variablen noch hinzufügen:

PHP Code:
Global Const $AC_SRC_ALPHA 
Und du musst natürlich den Pfad zur Hintergrunddatei (pngSrcGUIBK = "C:\bkg.png") ändern.
Fuii is offline  
Old 10/28/2010, 20:19   #6
 
elite*gold: 0
Join Date: Jul 2010
Posts: 62
Received Thanks: 4
Irgenwie funktionierts noch nicht =(
Liegt daran das keine While Schleife drin ist da sich dann das Programm sofort schließt oder?
Aber wenn ich eine rein bau funktionierts auch noch nicht, kannst du das mal bei dir ausprobieren bitte?^^
Mr. Pancake-Trader is offline  
Old 10/28/2010, 20:23   #7
 
elite*gold: 0
Join Date: Jul 2010
Posts: 450
Received Thanks: 78
wie würde das mit ner Uhr gehen???, dann muss ich net extra nen thread aufmachen.
eagly200 is offline  
Old 10/28/2010, 20:25   #8
 
elite*gold: 0
Join Date: May 2008
Posts: 23
Received Thanks: 10
Naja, etwas Vorwissen hätte ich schon vorrausgesetzt.
So musst du neben der while Schleife die beiden Fenster auch noch einblenden (GUISetState()) du Nase.

Voller Code:
PHP Code:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>

Global $pngSrcGUIBK "Pfad\zu\Hintergrunddatei"
Global Const $AC_SRC_ALPHA 1

Hauptfenster für den Hintergrund
$GUI 
GUICreate(""942528, -1, -1$WS_POPUPBitOR($WS_EX_CONTROLPARENT$WS_EX_LAYERED))
_GDIPlus_Startup() ; lade und aktiviere GDI+
Global 
$hImageGUIBK _GDIPlus_ImageLoadFromFile($pngSrcGUIBK) ; lade Hintergrunddatei per GDI+
SetBitmap($GUI$hImageGUIBK255) ; setze Alpha vom Fenster des Bildes auf 255 (transparent)


; => 
Fenster für buttons etc.
$GUIsub GUICreate(""942528, -1, -1$WS_POPUPBitOR($WS_EX_LAYERED$WS_EX_MDICHILD), $GUI)
GUISetBkColor(0x585858)    ; => hintergrund ebenfalls durchsichtigdamit die buttons direkt auf das Hintergrundbild gesetzt werden
_WinAPI_SetLayeredWindowAttributes
($GUIsub0x585858)

GUISetState(@SW_SHOW$GUI)
GUISetState(@SW_SHOW$GUIsub)

While 
1
    Sleep
(100)
WEnd


Func SetBitmap
($hGUI$hImage$iOpacity)    ; lade hintergrundbild und mache den hintergrund transparent
    Local $hScrDC
$hMemDC$hBitmap$hOld$pSize$tSize$pSource$tSource$pBlend$tBlend

    $hScrDC 
_WinAPI_GetDC(0)
    
$hMemDC _WinAPI_CreateCompatibleDC($hScrDC)
    
$hBitmap _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    
$hOld _WinAPI_SelectObject($hMemDC$hBitmap)
    
$tSize DllStructCreate($tagSIZE)
    
$pSize DllStructGetPtr($tSize)
    
DllStructSetData($tSize"X"_GDIPlus_ImageGetWidth($hImage))
    
DllStructSetData($tSize"Y"_GDIPlus_ImageGetHeight($hImage))
    
$tSource DllStructCreate($tagPOINT)
    
$pSource DllStructGetPtr($tSource)
    
$tBlend DllStructCreate($tagBLENDFUNCTION)
    
$pBlend DllStructGetPtr($tBlend)
    
DllStructSetData($tBlend"Alpha"$iOpacity)
    
DllStructSetData($tBlend"Format"$AC_SRC_ALPHA)
    
_WinAPI_UpdateLayeredWindow($hGUI$hScrDC0$pSize$hMemDC$pSource0$pBlend$ULW_ALPHA)
    
_WinAPI_ReleaseDC(0$hScrDC)
    
_WinAPI_SelectObject($hMemDC$hOld)
    
_WinAPI_DeleteObject($hBitmap)
    
_WinAPI_DeleteDC($hMemDC)
EndFunc 
Fuii is offline  
Thanks
1 User
Old 10/28/2010, 20:38   #9
 
omer36's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,254
Quote:
Originally Posted by eagly200 View Post
würde mich auch interresieren...
So könnte man auch ne Transparente Uhr programmieren.
geh mal in dein autoit ordner..---
C:\Program Files (x86)\AutoIt3\Examples\GUI\Advanced
da findeste eine Clock.au3...

omer36 is offline  
Old 10/28/2010, 20:40   #10
 
elite*gold: 0
Join Date: Jul 2010
Posts: 62
Received Thanks: 4
@eagly200
Du brauchst erstmal ne Gui also Bilder wo der Zeiger an allen Stellen steht auser du machst 3 Bilder:
1, Ziffernblatt
2, Stundenzeiger
3, Minutenzeiger
evtl. 4, Sekundenzeiger

Dann lässt du diese Bilder einfach nur rotieren also des heißt so z.b:
Wenn eine Sekunde um ist drehe Sekundenzeiger um 1 Grad oder so ähnlich...

@Fuii
Du bist genial
Achja ich fang in den Ferien wieder mit AutoIt an will nur so n paar Sachen nochmal wissen bevor ich Anfang ^^

Greetz
Mr. Pancake-Trader is offline  
Reply


Similar Threads Similar Threads
Autoit: Firefox anstatt Internet Explorer
08/01/2010 - General Coding - 1 Replies
Hi :) ich hab das problem IE läuft bei mir net gut und es gibt ja UDF´s für FF und ich wollte fragen, wie ich die Befehle von der FF.au3 in Autoit benutzen kann :confused: mfg crossi xD schomma danke im vorraus:handsdown::handsdown::handsdown:
Sura Fenster Bild Ändern ?
05/11/2010 - Metin2 Private Server - 3 Replies
Hallo arbeite grade sehr schön an meinem Clienten jetzt stört mich das Sura Fenster ganz am anfang kann man das auch irgendwie ändern ? wenn ja so ?
Fenster verschiben mit autoit
01/21/2010 - AutoIt - 4 Replies
so ich hab mal eine frage wie mach ich das autoit die linke maustaste halten soll und ein Fenster in eine bestimte position bringen soll ???
Fenster machen in autoit
01/13/2010 - AutoIt - 3 Replies
Leute also ich habe schon 2 bots und wollte mal fragen wie ich mein Bot in ein Fenster mache und dann nen Button für meine Bot functionen mache pls helft mir !!! ______________________________________ ihr kriegt auch ein THX!!! ______________________________________ :handsdown::handsdown::handsdown:
[AutoIT-Frage] Bildschrim absuchen nach Bild und Mausklick
10/19/2009 - Metin2 - 3 Replies
Wie Oben schon genannt. Ich suche den Befehl für AutoIT, das er den Bildschirm nach einem Bild absucht, und wenn er es gefunden hat (das Bild ist öfters da), dann soll er die Maus dahin bewegen und drauf klicken. Und dann soll er nach einem anderem Bild suchen, und da auch draufklicken. Ich hoffe mir kann hier jemand helfen. Zweck: Ich möchte einen Bot programmieren, der alle PN's in Metin2 schließt, da wenn man Rufen möchte, sofort (auf Sertain) dich 17 Spammer anschreiben. -.- Und das nervt....



All times are GMT +2. The time now is 07:29.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.