danke für den tipp. bei mir seh ich allerdings keine liste wenn ich @ eingebe. ich benutze chrome.
ich kann die xml importier funktion alternativ über xmldon laufen lassen und mal vergleichen
danke für den tipp. bei mir seh ich allerdings keine liste wenn ich @ eingebe. ich benutze chrome.
ich kann die xml importier funktion alternativ über xmldon laufen lassen und mal vergleichen
Danke für die Rückmeldungen
Ich habe nun eine JSON Variante implementiert . Persönlich finde ich die XML Variante angenehmer. Der Aufbau der JSON Datei könnte natürlich angepasst werden.
Danke
Wenn du Zugriff auf die Controls meinst kannst du dir mit theoretisch mit _XMLGUI_GetToken den Handle ausgeben, wenn ein Control erstellt wurden ist. Das Problem ist das dann keine Änderungen an der Struktur übernommen werden wenn Änderungen vorgenommen werden, deswegen der Umweg über die Funktion _XMLGUI_Query.
ZitatDu hast eine Pure-Basic-Dll als XML-Wrapper verwendet. Die Abhängigkeit zu dieser dll (die hier nur in 32Bit vorliegt und damit 64-Bit-Programme verhindert) ist sicher verschmerzbar aber eine Alternative wäre ja das Microsoft.XMLDom-Objekt gewesen welches ja bereits in Windows enthalten ist. Gibt es einen bestimmten Grund warum du den Pure-Basic-Wrapper bevorzugt hast?
Dachte die Trennung wäre hier Vorteilhaft. Sollte die DLL von einer anderen Anwendung aufgerufen werden wäre das Ergebnis beim Einlesen identisch. Evtl. Performance da nicht jedes mal beim Einlesen der Werte die DLL aufgerufen werden muss. Oder meinst du komplett ohne DLL nur mit Microsoft.XMLDom zur Verwaltung der Daten?
Hallo autoiter,
Danke. Ja Genau funktioniert allerdings nur teilweise. Lässt sich aber leicht erweitern.
Was wäre deine Alternative zu XML?
Hallo Leute,
ich möchte euch ein Skript vorstellen, mit diesem ihr eure GUI in XML (bzw. JSON) gestalten und bei eurem AutoIt Skript laden könnt.
Das Projekt habe ich für mich geschrieben, damit ich mich nicht dem Form Editor und dem Layout beschäftigen muss.
Hinweis
Der Umfang des Projekts ist noch überschaubar viele Funktionen sind noch nicht vorhanden. Sollte Interesse bestehen würde ich das Projekt fortführen und erweitern. Evtl. haben andere Interesse mitzumachen. Ich habe den aktuellen Stand hochgeladen bin mir bewusst das noch vieles fehlt, brauchte es für mich aber in keinem größeren Umfang.
Wie funktionierst?
Beispiel an einem Skript mit XMLGUI
ExampleXML.au3
#include <XML-GUI.au3> ;Skript importieren
;$App = _XMLGUI_CreateApp("Test.json")
;$App = _XMLGUI_CreateApp("Test.xml")
;$App = _XMLGUI_CreateApp("ExampleApp.xml")
$App = _XMLGUI_CreateApp("ExampleApp.json") ; _XMLGUI_CreateApp(FilenameXML|FilenameJSON) - Erstellt die Anwendung, Lädt XML oder JSON Datei
;_XMLGUI_ExportXMLFile($App,"Export.xml") ; Speichert die Anwendung als XML Datei
;_XMLGUI_ExportJSONFile($App,"Export.json") ; Speichert die Anwendung als JSON Datei
$Win = _XMLGUI_Query($App,"win")
$WinTitle = _XMLGUI_Query($App,$Win,"title")
; _XMLGUI_Query(App,Id|Node,Key,Value)
; App = Oberster Node => Normalerweise Rückgabe von _XMLGUI_CreateApp
; Id = Eingetragene Id im XML Code oder Rückgabe von _XMLGUI_Query(App,Id)
; Key = Wenn Null wird Inhalt geändert sonst das entsprechende Attribut
; Value = Wenn Default wird das Attribut oder Inhalt ausgegeben sonst verändert
func win_exit()
_XMLGUI_Query($App,$Win,"exit","true")
EndFunc
func btn_click()
MsgBox(0,$WinTitle,_XMLGUI_Query($App,"txt",null))
_XMLGUI_Query($App,"txt",null,"Ich bin sichtbar")
_XMLGUI_Query($App,"txt","show","true")
EndFunc
do
sleep(100)
until _XMLGUI_Query($app,$Win,"exit") = "true"
_XMLGUI_CloseApp($app) ; _XMLGUI_CloseApp(App)- Schließt die Anwendung
Alles anzeigen
ExampleApp.xml
<app>
<window id="win" width="800" height="600" show="true" title="Beispiel" onexit="win_exit">
<layout>
<tabview>
<tab title="Button,Inputs,CheckBox,Radio">
<layout padding="10">
<layout type="gridy" padding="10">
<input>Eingabe</input>
<input type="progress" pos="50"/>
<input type="slider" pos="50"/>
<input type="number"/>
<input type="date"/>
</layout>
<layout type="gridy" padding="10">
<checkbox checked="true">Auswahlbox</checkbox>
<checkbox>Auswahlbox</checkbox>
<group title="Radio">
<radiobox>Ja</radiobox>
<radiobox>Nein</radiobox>
</group>
<combolist>
<value>Lorem</value>
<value>Ipsum</value>
</combolist>
</layout>
</layout>
</tab>
<tab title="Lists">
<layout padding="10" type="gridy">
<button onclick="btn_click">Klick Mich</button>
<text id="txt" show="false">Mich sieht man noch nicht</text>
<treeview>
<value>Lorem</value>
<value>Ipsum</value>
</treeview>
<listview columns="2">
<value>Lorem</value>
<value>Ipsum</value>
</listview>
<list>
<value>Lorem</value>
<value selected="true">Ipsum</value>
<value>Lorem</value>
<value>Ipsum</value>
</list>
</layout>
</tab>
<tab title="Image">
<layout padding="10">
<image src="Bild.jpg"></image>
</layout>
</tab>
<tab title="Text">
<layout padding="10">
<text>Lorem Ipsum</text>
<group title="Gruppe">
<text>Lorem Ipsum</text>
</group>
<textarea>Textfeld</textarea>
</layout>
</tab>
</tabview>
</layout>
</window>
</app>
Alles anzeigen
ExampleApp.json
{
"class":"app",
"children":[
{
"class":"window",
"id":"win",
"attrs":{
"width":"800",
"height":"600",
"title":"Beispiel",
"show":"true",
"onexit":"win_exit"
},
"children":[
{
"class":"layout",
"children":[
{
"class":"button",
"value":"Klick Mich",
"attrs":{
"onclick":"btn_click"
}
},
{
"class":"text",
"id":"txt",
"value":"Text nicht sichtbar",
"attrs":{
"show":"false"
}
}
]
}
]
}
],
"attrs":{
"a":"10",
"b":"20"
}
}
Alles anzeigen
ExampleApp.xml in JSON umgewandelt => Test.json (Datei zu groß um hier zu posten)
Die XMLGUI.au3
#include <GUIConstantsEx.au3>
#include <GUIComboBoxEx.au3>
#include <GUIListBox.au3>
global $_XMLGUI_DLL
func _XMLGUI_Query($App,$Id,$Key = Default,$Value = Default)
if IsString($Id) then
$Node = _XMLGUI_GetNodeById($App,$Id)
Else
$Node = $Id
endif
if $Key = Default Then
Return $Node
elseif $Key = Null Then
if $Value = Default then
switch _XMLGUI_GetClass($Node)
case "button","text","input"
$ChangedValue = GUICtrlRead(_XMLGUI_GetToken($Node))
_XMLGUI_SetValue($Node,$ChangedValue)
return $ChangedValue
EndSwitch
return _XMLGUI_GetValue($Node)
endif
_XMLGUI_SetValue($Node,$Value)
switch _XMLGUI_GetClass($Node)
case "button","text","input"
GUICtrlSetData(_XMLGUI_GetToken($Node),$Value)
EndSwitch
return $Node
EndIf
if $Value = Default then
switch _XMLGUI_GetClass($Node)
case "input"
switch $Key
case "text"
$ChangedValue = GUICtrlRead(_XMLGUI_GetToken($Node))
_XMLGUI_SetAttr($Node,$Key,$ChangedValue)
return $ChangedValue
EndSwitch
EndSwitch
Return _XMLGUI_GetAttr($Node,$Key)
EndIf
_XMLGUI_SetAttr($Node,$Key,$Value)
$Class= _XMLGUI_GetClass($Node)
if $Key = "show" then
if $Class = "window" Then
if $Value = "true" Then
GUISetState(@SW_SHOW,_XMLGUI_GetToken($Node))
Else
GUISetState(@SW_HIDE,_XMLGUI_GetToken($Node))
endif
Else
_XMLGUI_ToggleView($Node)
endif
endif
switch $Class
case "window"
switch $Key
case "exit"
GUIDelete(_XMLGUI_GetToken($Node))
EndSwitch
case "button","text","input"
switch $Key
case "text"
GUICtrlSetData(_XMLGUI_GetToken($Node),$Value)
EndSwitch
EndSwitch
EndFunc
func _XMLGUI_CloseApp($App)
_XMLGUI_RemoveNode($App)
_XMLGUI_Close()
EndFunc
func _XMLGUI_CreateApp($Path)
_XMLGUI_Open()
switch StringRegExpReplace($Path, "^.*\.", "")
Case "xml"
$App = _XMLGUI_ImportXMLFile($Path)
case "json"
$App = _XMLGUI_ImportJSONFile($Path)
case Else
_XMLGUI_Close()
return msgbox(0,"","No Correct Type")
EndSwitch
_XMLGUI_RenderChildren($App)
return $App
EndFunc
func _XMLGUI_RenderChildren($Object)
$Len = _XMLGUI_GetChildrenLen($Object)
for $Index = 0 to $Len-1
_XMLGUI_RenderObject(_XMLGUI_GetChildrenByIndex($Object,$Index),$Index)
Next
EndFunc
func _XMLGUI_RenderObject($Object,$Index = -1)
switch _XMLGUI_GetClass($Object)
case "window"
$Handle = GUICreate(_XMLGUI_GetAttr($Object,"title"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
Opt("GUIOnEventMode", 1)
if not _XMLGUI_GetAttr($Object,"onexit") = "" then
GUISetOnEvent($GUI_EVENT_CLOSE,_XMLGUI_GetAttr($Object,"onexit"),$Handle)
endif
if _XMLGUI_GetAttr($Object,"show") ="true" Then
GUISetState(@SW_SHOW,$Handle)
endif
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_RenderChildren($Object)
case "text"
$Handle = GUICtrlCreateLabel(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_ToggleView($Object,True)
case "textarea"
$Handle = GUICtrlCreateEdit(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_ToggleView($Object,True)
case "checkbox"
$Handle = GUICtrlCreateCheckbox(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_ToggleView($Object,True)
_XMLGUI_ToggleChecked($Object,True)
case "input"
switch _XMLGUI_GetAttr($Object,"type")
case "slider"
$Handle = GUICtrlCreateSlider(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
GUICtrlSetData($Handle,_XMLGUI_GetAttr($Object,"pos"))
case "date"
$Handle = GUICtrlCreateDate(_XMLGUI_GetAttr($Object,"text"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
case "progress"
$Handle = GUICtrlCreateProgress(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
GUICtrlSetData($Handle,_XMLGUI_GetAttr($Object,"pos"))
case else
$Handle = GUICtrlCreateInput(_XMLGUI_GetAttr($Object,"text"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
if _XMLGUI_GetAttr($Object,"type") = "number" Then
GUICtrlCreateUpdown($Handle)
EndIf
EndSwitch
_XMLGUI_SetToken($Object,$Handle)
case "image"
$Handle = GUICtrlCreatePic(_XMLGUI_GetAttr($Object,"src"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_ToggleView($Object,True)
case "button"
$Handle = GUICtrlCreateButton(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
if not _XMLGUI_GetAttr($Object,"onclick") = "" then
GUICtrlSetOnEvent($Handle,_XMLGUI_GetAttr($Object,"onclick"))
endif
_XMLGUI_ToggleView($Object,True)
case "list"
$Handle = GUICtrlCreateList("",_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_RenderChildren($Object)
if not _XMLGUI_GetAttr($Object,"selected") = "" Then
_GUICtrlListBox_SetCurSel($Handle,Int(_XMLGUI_GetAttr($Object,"selected")))
endif
case "combolist"
$Handle = GUICtrlCreateCombo("",_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_RenderChildren($Object)
_XMLGUI_ToggleView($Object,True)
case "group"
$Handle = GUICtrlCreateGroup(_XMLGUI_GetAttr($Object,"title"),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
if not _XMLGUI_GetAttr($Object,"title") = "" then
_XMLGUI_SetAttr($Object,"margin",16)
endif
_XMLGUI_Layout($Object)
case "tabview"
$Handle = GUICtrlCreateTab(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_SetAttr($Object,"type","take")
_XMLGUI_SetAttr($Object,"margin",30)
_XMLGUI_Layout($Object)
GUICtrlCreateTabItem("")
case "tab"
$Handle = GUICtrlCreateTabItem(_XMLGUI_GetAttr($Object,"title"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_RenderChildren($Object)
case "radiobox"
$Handle = GUICtrlCreateRadio(_XMLGUI_GetValue($Object),_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_ToggleView($Object,True)
_XMLGUI_ToggleChecked($Object,True)
case "listview"
$Handle = GUICtrlCreateListView("|",_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_RenderChildren($Object)
case "treeview"
$Handle = GUICtrlCreateTreeView(_XMLGUI_GetAttr($Object,"left"),_XMLGUI_GetAttr($Object,"top"),_XMLGUI_GetAttr($Object,"width"),_XMLGUI_GetAttr($Object,"height"))
_XMLGUI_SetToken($Object,$Handle)
_XMLGUI_RenderChildren($Object)
case "layout"
_XMLGUI_Layout($Object)
case "value"
$Parent = _XMLGUI_GetParent($Object)
switch _XMLGUI_GetClass($Parent)
case "list"
_GUICtrlListBox_AddString(_XMLGUI_GetToken($Parent),_XMLGUI_GetValue($Object))
if _XMLGUI_GetAttr($Object,"selected") = "true" then
_XMLGUI_SetAttr($Parent,"selected",$Index)
endif
case "combolist"
GUICtrlSetData(_XMLGUI_GetToken($Parent),_XMLGUI_GetValue($Object))
case "listview"
GUICtrlCreateListViewItem(_XMLGUI_GetValue($Object),_XMLGUI_GetToken($Parent))
case "treeview"
GUICtrlCreateTreeViewItem(_XMLGUI_GetValue($Object),_XMLGUI_GetToken($Parent))
EndSwitch
EndSwitch
EndFunc
func _XMLGUI_ToggleView($Object,$Created = False)
if _XMLGUI_GetAttr($Object,"show") = "false" then
GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_HIDE)
Else
GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_SHOW)
endif
EndFunc
func _XMLGUI_ToggleChecked($Object,$Created = False)
if _XMLGUI_GetAttr($Object,"checked") = "true" then
GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_CHECKED)
Else
GUICtrlSetState(_XMLGUI_GetToken($Object),$GUI_UNCHECKED)
_XMLGUI_SetAttr($Object,"checked","false")
endif
EndFunc
func _XMLGUI_Layout($Object)
$Len = _XMLGUI_GetChildrenLen($Object)
$Type = _XMLGUI_GetAttr($Object,"type")
$Left = _XMLGUI_GetAttr($Object,"left")
$Top = _XMLGUI_GetAttr($Object,"top")
$Padding = _XMLGUI_GetAttr($Object,"padding")
$PaddingTop = _XMLGUI_GetAttr($Object,"padding-top")
$PaddingLeft = _XMLGUI_GetAttr($Object,"padding-left")
$PaddingBottom = _XMLGUI_GetAttr($Object,"padding-bottom")
$PaddingRight = _XMLGUI_GetAttr($Object,"padding-right")
$Margin = _XMLGUI_GetAttr($Object,"margin")
$Width = _XMLGUI_GetAttr($Object,"width")
$Height = _XMLGUI_GetAttr($Object,"height")
if $Width = 0 or $Height = 0 Then
$Parent = _XMLGUI_GetParent($Object)
if not $Parent = 0 Then
$Left = _XMLGUI_GetAttr($Parent,"left")
$Top = _XMLGUI_GetAttr($Parent,"top")
$Width = _XMLGUI_GetAttr($Parent,"width")
$Height = _XMLGUI_GetAttr($Parent,"height")
endif
EndIf
if $Margin > 0 Then
$Left += $Margin
$Top += $Margin
$Width -= $Margin*2
$Height -= $Margin*2
endif
switch $Type
case "take"
case "gridy"
$Height /= $Len
$MaxHeight = _XMLGUI_GetAttr($Object,"maxheight")
if not $MaxHeight = 0 and $Height > $MaxHeight Then
$Height = $MaxHeight
EndIf
case "gridx"
ContinueCase
case else
$Width /= $Len
EndSwitch
for $Index = 0 to $Len-1
$Child = _XMLGUI_GetChildrenByIndex($Object,$Index)
_XMLGUI_SetAttr($Child,"left",$Left+$Padding+$PaddingLeft)
_XMLGUI_SetAttr($Child,"top",$Top+$Padding+$PaddingTop)
_XMLGUI_SetAttr($Child,"width",$Width-$Padding*2-$PaddingLeft-$PaddingRight)
_XMLGUI_SetAttr($Child,"height",$Height-$Padding*2-$PaddingTop-$PaddingBottom)
switch $Type
case "take"
case "gridy"
$Top += $Height
case "gridx"
ContinueCase
case else
$Left += $Width
EndSwitch
Next
_XMLGUI_RenderChildren($Object)
EndFunc
func _XMLGUI_Open()
$_XMLGUI_DLL = DllOpen("XML-GUI.dll")
EndFunc
func _XMLGUI_AddNode($Parent,$Class = "",$Id = "",$Value = "")
$Result = Dllcall($_XMLGUI_DLL,"int","AddNode","int",$Parent,"wstr",$Class,"wstr",$Id,"wstr",$Value)
return $Result[0]
EndFunc
func _XMLGUI_GetChildrenByIndex($This,$Index)
$Result = Dllcall($_XMLGUI_DLL,"int","GetChildrenByIndex","int",$This,"int",$Index)
return $Result[0]
EndFunc
func _XMLGUI_GetChildrenLen($This)
$Result = Dllcall($_XMLGUI_DLL,"int","GetChildrenLen","int",$This)
return $Result[0]
EndFunc
func _XMLGUI_RemoveNode($This)
$Result = Dllcall($_XMLGUI_DLL,"int","RemoveNode","int",$This,"int",0)
return $Result[0]
EndFunc
func _XMLGUI_ImportXML($String)
$Result = Dllcall($_XMLGUI_DLL,"int","ImportXML","wstr",$String)
return $Result[0]
EndFunc
func _XMLGUI_ImportXMLFile($Filename)
$Result = Dllcall($_XMLGUI_DLL,"int","ImportXMLFile","wstr",$Filename)
return $Result[0]
EndFunc
func _XMLGUI_ExportXMLFile($This,$Filename)
$Result = Dllcall($_XMLGUI_DLL,"int","ExportXMLFile","int",$This,"wstr",$Filename)
return $Result[0]
EndFunc
func _XMLGUI_ExportJSONFile($This,$Filename)
$Result = Dllcall($_XMLGUI_DLL,"int","ExportJSONFile","int",$This,"wstr",$Filename)
return $Result[0]
EndFunc
func _XMLGUI_ImportJSONFile($Filename)
$Result = Dllcall($_XMLGUI_DLL,"int","ImportJSONFile","wstr",$Filename)
return $Result[0]
EndFunc
func _XMLGUI_SetValue($This,$Value)
$Result = Dllcall($_XMLGUI_DLL,"int","SetValue","int",$This,"wstr",$Value)
return $Result[0]
EndFunc
func _XMLGUI_GetValue($This)
$Result = Dllcall($_XMLGUI_DLL,"wstr","GetValue","int",$This)
return $Result[0]
EndFunc
func _XMLGUI_SetId($This,$Id)
$Result = Dllcall($_XMLGUI_DLL,"int","SetId","int",$This,"wstr",$Id)
return $Result[0]
EndFunc
func _XMLGUI_GetId($This)
$Result = Dllcall($_XMLGUI_DLL,"wstr","GetId","int",$This)
return $Result[0]
EndFunc
func _XMLGUI_SetClass($This,$Class)
$Result = Dllcall($_XMLGUI_DLL,"int","SetClass","int",$This,"wstr",$Class)
return $Result[0]
EndFunc
func _XMLGUI_GetClass($This)
$Result = Dllcall($_XMLGUI_DLL,"wstr","GetClass","int",$This)
return $Result[0]
EndFunc
func _XMLGUI_SetToken($This,$Token)
$Result = Dllcall($_XMLGUI_DLL,"int","SetToken","int",$This,"int",$Token)
return $Result[0]
EndFunc
func _XMLGUI_GetToken($This)
$Result = Dllcall($_XMLGUI_DLL,"int","GetToken","int",$This)
return $Result[0]
EndFunc
func _XMLGUI_SetAttr($This,$Name,$Value)
$Result = Dllcall($_XMLGUI_DLL,"int","SetAttr","int",$This,"wstr",$Name,"wstr",$Value)
return $Result[0]
EndFunc
func _XMLGUI_GetAttr($This,$Name)
$Result = Dllcall($_XMLGUI_DLL,"wstr","GetAttr","int",$This,"wstr",$Name)
return $Result[0]
EndFunc
func _XMLGUI_GetParent($This)
$Result = Dllcall($_XMLGUI_DLL,"int","GetParent","int",$This)
return $Result[0]
EndFunc
func _XMLGUI_GetNodeById($Current,$Id)
$Result = Dllcall($_XMLGUI_DLL,"int","GetNodeById","int",$Current,"wstr",$Id)
return $Result[0]
EndFunc
func _XMLGUI_Close()
dllclose($_XMLGUI_DLL)
EndFunc
Alles anzeigen
XML-GUI.dll in PureBasic
EnableExplicit
Structure Node
Id.s
Class.s
Value.s
Token.i
Map Attrs.s()
List *Children()
*Parent.Node
EndStructure
Procedure FindChildren(*This.Node,*Child.Node)
If *This = 0
ProcedureReturn #False
EndIf
ForEach *This\Children()
If *This\Children() = *Child
ProcedureReturn #True
EndIf
Next
ProcedureReturn #False
EndProcedure
ProcedureDLL AddNode(*Parent.Node,Class.s,Id.s,Value.s)
Define *This.Node = AllocateStructure(Node)
With *This.Node
\Id = Id
\Class = Class
\Value = Value
\Parent = *Parent
EndWith
If Not *Parent = 0
AddElement(*Parent\Children())
*Parent\Children() = *This
EndIf
ProcedureReturn *This
EndProcedure
Procedure ExtractXML(*XMLNode,*Node.Node)
Define *NextXMLNode, AttrName.s, AttrValue.s
If *Node = 0
*Node = AddNode(0,"","","")
EndIf
With *Node
\Class = GetXMLNodeName(*XMLNode)
\Value = GetXMLNodeText(*XMLNode)
ExamineXMLAttributes(*XMLNode)
While NextXMLAttribute(*XMLNode)
AttrName = XMLAttributeName(*XMLNode)
AttrValue = XMLAttributeValue(*XMLNode)
\Attrs(AttrName) = AttrValue
If AttrName = "id"
\Id = AttrValue
EndIf
Wend
EndWith
*NextXMLNode = ChildXMLNode(*XMLNode)
If *NextXMLNode
ExtractXML(*NextXMLNode,AddNode(*Node,"","",""))
Repeat
*NextXMLNode = NextXMLNode(*NextXMLNode)
If *NextXMLNode
ExtractXML(*NextXMLNode,AddNode(*Node,"","",""))
Else
Break
EndIf
ForEver
EndIf
ProcedureReturn *Node
EndProcedure
Procedure ExtractJSON(*JSONNode,*Node.Node)
Define *JSONNext, AttrName.s, AttrValue.s, i.i
If *Node = 0
*Node = AddNode(0,"","","")
EndIf
ExamineJSONMembers(*JSONNode)
While NextJSONMember(*JSONNode)
AttrName = JSONMemberKey(*JSONNode)
*JSONNext = JSONMemberValue(*JSONNode)
Select JSONType(*JSONNext)
Case #PB_JSON_String
AttrValue = GetJSONString(*JSONNext)
Select AttrName
Case "id"
*Node\Id = AttrValue
Case "class"
*Node\Class = AttrValue
Case "value"
*Node\Value = AttrValue
Default
*Node\Attrs(AttrName) = AttrValue
EndSelect
Case #PB_JSON_Object
If AttrName = "attrs"
ExamineJSONMembers(*JSONNext)
While NextJSONMember(*JSONNext)
*Node\Attrs(JSONMemberKey(*JSONNext)) = GetJSONString(JSONMemberValue(*JSONNext))
Wend
EndIf
Case #PB_JSON_Array
If AttrName = "children"
For i = 0 To JSONArraySize(*JSONNext)-1
ExtractJSON(GetJSONElement(*JSONNext,i),AddNode(*Node,"","",""))
Next
EndIf
EndSelect
Wend
ProcedureReturn *Node
EndProcedure
Procedure ConstructXML(*XMLNode,*Node.Node)
Define *NextXMLNode
With *Node
*NextXMLNode = CreateXMLNode(*XMLNode,\Class)
If Not \Value = ""
SetXMLNodeText(*NextXMLNode,\Value)
EndIf
SetXMLAttribute(*NextXMLNode,"id",\Id)
ForEach \Attrs()
SetXMLAttribute(*NextXMLNode,MapKey(\Attrs()),\Attrs())
Next
ForEach \Children()
ConstructXML(*NextXMLNode,\Children())
Next
EndWith
EndProcedure
Procedure ConstructJSON(*JSONNode,*Node.Node)
Define *NextJSONNode, *Attrs, *Children
With *Node
*NextJSONNode = AddJSONMember(*JSONNode,"id")
SetJSONString(*NextJSONNode,\Id)
*NextJSONNode = AddJSONMember(*JSONNode,"class")
SetJSONString(*NextJSONNode,\Class)
If Not \Value = ""
*NextJSONNode = AddJSONMember(*JSONNode,"value")
SetJSONString(*NextJSONNode,\Value)
EndIf
If MapSize(\Attrs()) > 0
*NextJSONNode = AddJSONMember(*JSONNode,"attrs")
*Attrs = SetJSONObject(*NextJSONNode)
ForEach \Attrs()
SetJSONString(AddJSONMember(*Attrs,MapKey(\Attrs())),\Attrs())
Next
EndIf
If ListSize(\Children()) > 0
*NextJSONNode = AddJSONMember(*JSONNode,"children")
*Children = SetJSONArray(*NextJSONNode)
ForEach \Children()
ConstructJSON(SetJSONObject(AddJSONElement(*Children)),\Children())
Next
EndIf
EndWith
EndProcedure
ProcedureDLL ImportXML(String.s)
Define XML = ParseXML(#PB_Any,String)
ProcedureReturn ExtractXML(MainXMLNode(XML),0)
EndProcedure
ProcedureDLL ImportXMLFile(Filename.s)
Define XML = LoadXML(#PB_Any,Filename)
ProcedureReturn ExtractXML(MainXMLNode(XML),0)
EndProcedure
ProcedureDLL ImportJSONFile(Filename.s)
Define JSON = LoadJSON(#PB_Any,Filename)
ProcedureReturn ExtractJSON(JSONValue(JSON),0)
EndProcedure
ProcedureDLL ExportXMLFile(*This.Node,Filename.s)
Define XML = CreateXML(#PB_Any)
ConstructXML(RootXMLNode(XML),*This)
FormatXML(XML,#PB_XML_WindowsNewline | #PB_XML_ReFormat )
SaveXML(XML,Filename)
ProcedureReturn #True
EndProcedure
ProcedureDLL ExportJSONFile(*This.Node,Filename.s)
Define JSON = CreateJSON(#PB_Any)
ConstructJSON(SetJSONObject(JSONValue(JSON)),*This)
SaveJSON(JSON,Filename,#PB_JSON_PrettyPrint )
ProcedureReturn #True
EndProcedure
ProcedureDLL AddChildren(*This.Node,*Children.Node)
AddElement(*This\Children())
*This\Children() = *Children
*Children\Parent = *This
EndProcedure
ProcedureDLL GetNodeById(*Current.Node,Id.s)
Define *ResultNode
If *Current\Id = Id
ProcedureReturn *Current
EndIf
ForEach *Current\Children()
*ResultNode = GetNodeById(*Current\Children(),Id)
If *ResultNode
ProcedureReturn *ResultNode
EndIf
Next
EndProcedure
ProcedureDLL GetChildrenByIndex(*This.Node,Index.i)
SelectElement(*This\Children(),Index)
ProcedureReturn *This\Children()
EndProcedure
ProcedureDLL GetChildrenLen(*This.Node)
ProcedureReturn ListSize(*This\Children())
EndProcedure
ProcedureDLL RemoveNode(*This.Node, Depth.i)
ForEach *This\Children()
RemoveNode(*This\Children(),Depth + 1)
Next
If Depth = 0 And FindChildren(*This\Parent,*This)
DeleteElement(*This\Parent\Children(),1)
EndIf
FreeStructure(*This)
ProcedureReturn #True
EndProcedure
ProcedureDLL GetParent(*This.Node)
ProcedureReturn *This\Parent
EndProcedure
ProcedureDLL SetAttr(*This.Node,Name.s,Value.s)
*This\Attrs(Name) = Value
EndProcedure
ProcedureDLL.s GetAttr(*This.Node,Name.s)
If FindMapElement(*This\Attrs(),Name)
ProcedureReturn *This\Attrs()
EndIf
EndProcedure
ProcedureDLL SetValue(*This.Node,Value.s)
*This\Value = Value
EndProcedure
ProcedureDLL.s GetValue(*This.Node)
ProcedureReturn *This\Value
EndProcedure
ProcedureDLL SetId(*This.Node,Id.s)
*This\Id = Id
EndProcedure
ProcedureDLL.s GetId(*This.Node)
ProcedureReturn *This\Id
EndProcedure
ProcedureDLL SetClass(*This.Node,Class.s)
*This\Class = Class
EndProcedure
ProcedureDLL.s GetClass(*This.Node)
ProcedureReturn *This\Class
EndProcedure
ProcedureDLL SetToken(*This.Node,Token.i)
*This\Token = Token
EndProcedure
ProcedureDLL GetToken(*This.Node)
ProcedureReturn *This\Token
EndProcedure
Alles anzeigen
XML: Übersicht der Elemente und Attribute (Nicht alle Attribute funktionieren)
<app></app>
<window id="" width="" height="" show="true|false" title="" onexit=""></window>
<layout id="" left="" top="" width="" height="" show="true|false" type="gridx|gridy|take" padding="" paddng-right="" padding-left="" padding-bottom="" padding-top="" margin="" margin-right="" margin-left="" margin-bottom="" margin-top=""></layout>
<group id="" left="" top="" width="" height="" show="true|false" title="" type="gridx|gridy|take"></group>
<tabview id="" left="" top="" width="" height="" show="true|false" selected="">
<tab id="" title="" selected="true|false"></tab>
</tabview>
<list id="" left="" top="" width="" height="" show="true|false" selected="">
<value id="" selected="true|false">TEXT</value>
</list>
<listview id="" left="" top="" width="" height="" show="true|false" columns="" selected="">
<value id="" selected="true|false">TEXT</value>
</listview>
<treeview id="" left="" top="" width="" height="" show="true|false" selected="">
<value id="" selected="true|false">TEXT</value>
</treeview>
<text id="" left="" top="" width="" height="" show="true|false">TEXT</text>
<button id="" left="" top="" width="" height="" show="true|false" onclick="">TEXT</button>
<image id="" left="" top="" width="" height="" show="true|false" src=""></image>
<input id="" left="" top="" width="" height="" show="true|false" type="" pos="">TEXT</input>
<textarea id="" left="" top="" width="" height="" show="true|false">TEXT</textarea>
<checkbox id="" left="" top="" width="" height="" show="true|false" checked="true|false">TEXT</checkbox>
<radiobox id="" left="" top="" width="" height="" show="true|false" checked="true|false">TEXT</radiobox>
<combolist id="" left="" top="" width="" height="" show="true|false" selected="">
<value id="" selected="true|false">TEXT</value>
</combolist>
Alles anzeigen
Danke habe soeben die Autoit Version als Dateianhang hinzugefügt
Ja da hast du natürlich recht. Allerdings war mein Ziel das gleiche Ergebnis in den unterschiedlichen Programmiersrpachen zu bekommen das der Quellcode für diese einzelnen Sprachen optimiert werden kann ist mir bewusst.
Vielleicht komm ich ja noch dazu diese anzupassen
Ps:
Ich habe nun noch eine Android Version in Basic4Android erstellt
Guten Abend
Ich habe zu Lernzwecken ein Snake-Remake in bisher 8 unterschiedlichen Programmiersprachen (AutoIt, PureBasic, C#, VisualBasic .NET, JavaScript, Java, Python, Basic4Android) programmiert.
Das Spiel ist in den unterschiedlichen Programmiersprachen im Design und in der Steuerung (außer bei der Android Version) immer identisch.
Vielleicht kann ja der ein oder andere damit etwas Anfangen oder mir noch Tipps geben
[Blockierte Grafik: https://image.ibb.co/jYSvoR/Clipboard03.jpg]
AutoIt Quellcode:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon.ico
#AutoIt3Wrapper_Outfile=Snake_AutoIt.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
#include <Sound.au3>
Global Const $window_title = "Snake"
Global Const $window_size = 500
Global Const $block_size = 20
Global Const $game_size = $window_size / $block_size
Global Const $key_right = 27
Global Const $key_left = 25
Global Const $key_up = 26
Global Const $key_down = 28
Global Const $key_space = 20
Global Enum $snake_x, $snake_y, $snake_length
Global Enum $direction_right, $direction_left, $direction_up, $direction_down
Global Enum $game_start, $game_play, $game_pause, $game_restart
Global $window
Global $graphics, $bitmap, $buffer
Global $user_dll
Global $snake_direction
Global $snake_current_direction
Global $snake[1][$snake_length]
Global $gift_x, $gift_y, $gift_collision
Global $game_state = $game_start
Global $gift_sound[4]
Global $collision_sound
Global $collision
Global $effect
Global $effect_timer
Global $move_timer
Global $fps_timer = TimerInit()
Global $fps_counter = 0
Global $fps = 0
init()
Func init()
$user_dll = DllOpen("user32.dll")
$window = GUICreate($window_title, $window_size, $window_size)
_GDIPlus_Startup()
$graphics = _GDIPlus_GraphicsCreateFromHWND($window)
$bitmap = _GDIPlus_BitmapCreateFromGraphics($window_size, $window_size, $graphics)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
For $i = 0 To UBound($gift_sound) - 1
$gift_sound[$i] = _SoundOpen("gift" & String($i + 1) & ".wav")
Next
$collision_sound = _SoundOpen("collision.wav")
GUISetState()
restart()
main()
EndFunc ;==>init
Func main()
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
event()
draw()
WEnd
close()
EndFunc ;==>main
Func close()
DllClose($user_dll)
_SoundClose($collision_sound)
For $i = 0 To UBound($gift_sound) - 1
_SoundClose($gift_sound[$i])
Next
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_Shutdown()
GUIDelete($window)
EndFunc ;==>close
Func fps()
$fps_counter += 1
If TimerDiff($fps_timer) >= 1000 Then
$fps = $fps_counter
$fps_counter = 0
$fps_timer = TimerInit()
EndIf
EndFunc ;==>fps
Func restart()
ReDim $snake[1][$snake_length]
$snake[0][$snake_x] = Random(3, $game_size - 4, 1)
$snake[0][$snake_y] = Random(3, $game_size - 4, 1)
gift()
$move_timer = TimerInit()
EndFunc ;==>restart
Func gift()
Local $find
Do
$gift_x = Random(1, $game_size - 2, 1)
$gift_y = Random(1, $game_size - 2, 1)
$find = False
For $i = 0 To UBound($snake) - 1
If $gift_x = $snake[$i][$snake_x] And $gift_y = $snake[$i][$snake_y] Then
$find = True
ExitLoop
EndIf
Next
Until Not $find
EndFunc ;==>gift
Func event()
Local $restart
Switch $game_state
Case $game_start, $game_restart
;if start or restart game
$restart = False
If _IsPressed($key_left, $user_dll) Then
$snake_direction = $direction_left
$restart = True
ElseIf _IsPressed($key_right, $user_dll) Then
$snake_direction = $direction_right
$restart = True
ElseIf _IsPressed($key_up, $user_dll) Then
$snake_direction = $direction_up
$restart = True
ElseIf _IsPressed($key_down, $user_dll) Then
$snake_direction = $direction_down
$restart = True
EndIf
If $restart Then
If $game_state = $game_restart Then
restart()
EndIf
$game_state = $game_play
EndIf
Case $game_play
;if play and click space
If _IsPressed($key_space, $user_dll) Then
Do
Until Not _IsPressed($key_space, $user_dll)
$game_state = $game_pause
EndIf
;if key left
If _IsPressed($key_left, $user_dll) Then
If Not (UBound($snake) > 1 And $snake_current_direction = $direction_right) Then
$snake_direction = $direction_left
EndIf
;if key right
ElseIf _IsPressed($key_right, $user_dll) Then
If Not (UBound($snake) > 1 And $snake_current_direction = $direction_left) Then
$snake_direction = $direction_right
EndIf
EndIf
;if key up
If _IsPressed($key_up, $user_dll) Then
If Not (UBound($snake) > 1 And $snake_current_direction = $direction_down) Then
$snake_direction = $direction_up
EndIf
;if key down
ElseIf _IsPressed($key_down, $user_dll) Then
If Not (UBound($snake) > 1 And $snake_current_direction = $direction_up) Then
$snake_direction = $direction_down
EndIf
EndIf
move()
Case $game_pause
;if pause and click space
If _IsPressed($key_space, $user_dll) Then
Do
Until Not _IsPressed($key_space, $user_dll)
$game_state = $game_play
EndIf
EndSwitch
EndFunc ;==>event
Func move()
Local $next_x, $next_y, $x_next, $y_next
If TimerDiff($move_timer) >= 100 Then
$snake_current_direction = $snake_direction
$next_x = $snake[0][$snake_x]
$next_y = $snake[0][$snake_y]
Switch $snake_current_direction
Case $direction_right
$next_x += 1
Case $direction_left
$next_x -= 1
Case $direction_up
$next_y -= 1
Case $direction_down
$next_y += 1
EndSwitch
$collision = False
For $i = 0 To UBound($snake) - 2
If $next_x = $snake[$i][$snake_x] And $next_y = $snake[$i][$snake_y] Then
$collision = True
ExitLoop
EndIf
Next
If $collision Or $next_x < 1 Or $next_x > $game_size - 2 Or $next_y < 1 Or $next_y > $game_size - 2 Then
$collision = True
_SoundPlay($collision_sound)
$game_state = $game_restart
Return
EndIf
If $next_x = $gift_x And $next_y = $gift_y Then
_SoundPlay($gift_sound[Random(0, UBound($gift_sound) - 1, 1)])
$gift_collision = True
$i = UBound($snake)
ReDim $snake[$i + 1][$snake_length]
gift()
EndIf
For $i = 0 To UBound($snake) - 1
$x_next = $next_x
$y_next = $next_y
$next_x = $snake[$i][$snake_x]
$next_y = $snake[$i][$snake_y]
$snake[$i][$snake_x] = $x_next
$snake[$i][$snake_y] = $y_next
Next
$move_timer = TimerInit()
EndIf
EndFunc ;==>move
Func draw()
Local $text = ""
Local $color = 0xff99cb99
If $gift_collision Then
$gift_collision = False
$effect = 1
$effect_timer = TimerInit()
ElseIf $collision Then
$collision = False
$effect = 2
$effect_timer = TimerInit()
EndIf
If $effect = 1 Then
$color = 0xffffffff
ElseIf $effect = 2 Then
$color = 0xffFEC6BF
EndIf
If $effect > 0 And TimerDiff($effect_timer) >= 30 Then
$effect = 0
EndIf
_GDIPlus_GraphicsClear($buffer, $color)
;draw bound
_GDIPlus_GraphicsDrawRect($buffer, $block_size, $block_size, $window_size - $block_size * 2, $window_size - $block_size * 2)
;draw text, score and fps
_GDIPlus_GraphicsDrawString($buffer, "SCORE: " & String((UBound($snake) - 1) * 10), $block_size, $window_size - $block_size + 3, "Lucida Console", 10)
_GDIPlus_GraphicsDrawString($buffer, "FPS: " & String($fps), $window_size - $block_size * 5, $window_size - $block_size + 3, "Lucida Console", 10)
Switch $game_state
Case $game_start
$text = "CLICK ARROW KEYS TO START"
Case $game_pause
$text = "PAUSE, CLICK SPACE TO PLAY"
Case $game_restart
$text = "LOST, CLICK ARROW KEYS TO RESTART"
Case $game_play
$text = "HAVE FUN"
EndSwitch
_GDIPlus_GraphicsDrawString($buffer, $text, $block_size, 3, "Lucida Console", 10)
;draw snake
For $i = 0 To UBound($snake) - 1
_GDIPlus_GraphicsFillRect($buffer, $snake[$i][$snake_x] * $block_size + 1, $snake[$i][$snake_y] * $block_size + 1, $block_size - 2, $block_size - 2)
Next
;draw gift
_GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size, $gift_y * $block_size + $block_size / 3, $block_size / 3, $block_size / 3)
_GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size + $block_size / 3 * 2, $gift_y * $block_size + $block_size / 3, $block_size / 3, $block_size / 3)
_GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size + $block_size / 3, $gift_y * $block_size, $block_size / 3, $block_size / 3)
_GDIPlus_GraphicsFillRect($buffer, $gift_x * $block_size + $block_size / 3, $gift_y * $block_size + $block_size / 3 * 2, $block_size / 3, $block_size / 3)
_GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
fps()
EndFunc ;==>draw
Alles anzeigen
In der ZIP Datei sind alle Quellcodes, ausführbare Dateien, Sounds und Icons enthalten
DOWNLOAD: https://drive.google.com/uc?id=1FDYzRgJ…export=download
DOWNLOAD mit Android Version: https://drive.google.com/open?id=1Rcoj3…ONG53TPVYzVc-bV
Hallo Musashi
Es geht Dir sicher um die Lizenzsituation, nicht um den Datenschutz, richtig ?
´Da hast du recht
Erstmal vielen Dank für deine hilfreichen Antworten.
Ich habe mich erstmal entschlossen das Programm ohne Wörter-Datenbank bereitzustellen. (Siehe ersten Post)
Ich werde schauen das ich eine Wörteliste finde bei der es keine rechtliche Bedenken gibt. Dein Link hab ich mir angeschaut vielleicht schaff ich ja damit eine Variante bereitzustellen sollte es dort keine Bedenken geben.
Gabriel
[Blockierte Grafik: http://www.bilder-upload.eu/upload/bd7c1e-1509649050.jpg]
Guten Abend
Da ich in letzter Zeit häufiger Boggle gespielt habe wollte ich ein Programm schreiben was für das Spiel alle möglichen Wörter ausgeben kann.
Die Eingabe der einzelnen Buchstaben erfolgt manuell oder durch den Zufallsgenerator mithilfe der Buchstabenhäufigkeit.
Anschließend lassen sich alle möglichen Wörter auflisten die in der Wörter-Datenbank vorhanden sind.
Diese habe ich von einem OpenOffice Erweiterung entnommen (https://extensions.openoffice.org/en/project/ger…mi-dictionaries).
Da ich mir hinsichtlich rechtlicher Bedingungen nicht sicher bin sollte mich bitte jemand im Falle des Datenschutz darauf hinweisen so das ich diese aus dem Programm entfernen kann.
Leider kann ich aus rechtlichen Gründen bis jetzt keine Wörter-Datenbank mitliefern.
Ich werde mich bemühen eine nachzuliefern
Der Aufbau der Wörter-Datenbank:
Alle Wörter müssen in Kleinbuchstaben ohne Umlaute und ß Zeilenweise in die Words.dat eingetragen werden. Fertig!
Das Programm habe ich zunächst in PureBasic programmiert und anschließend in AutoIt. In der AutoIt Version gibt es auch die Möglichkeit das Wörter finden mithilfe einer PureBasic-DLL zu beschleunigen.
Ich freue mich über Feedback
Viel Spaß
Gabriel
Isome
Hallo allerseits
Ich habe aus Interesse eine kleine Engine geschrieben womit sich eine 2d Karte isometrisch darstellen lässt. Die Umrechnung von Mauskoordinaten in die Kartenkoordinaten funktioniert auch.
Somit lassen sich kleine Aufbauspiele realisieren
Wenn ihr Spaß hab könnt ihr damit ein bißchen rumspielen und verbesserungswünschen äußern (bugs natürlich auch ).
Bilder
[Blockierte Grafik: https://picload.org/image/rcwwrraw/img2.jpg]
[Blockierte Grafik: https://picload.org/image/rcwwrror/img1.jpg]
Funktionen
Quellcode
Isome
;isome globals
;fenstergröße
Global $window_width
Global $window_height
;tileset größen
Global $tile_width
Global $tile_height
;karteneigenschaften
Global $game_map_width
Global $game_map_height
Global $game_map_x
Global $game_map_y
Global $game_map
;beweggeschwindigkeit und überlauf
Global $game_map_smooth_x
Global $game_map_smooth_y
Global $game_map_speed
;maus
Global $mouse_x
Global $mouse_y
;game_resize()
Func game_resize($width, $height)
$window_width = $width
$window_height = $height
EndFunc ;==>game_resize
;game_position()
Func game_position($x, $y)
$mouse_x = $x
$mouse_y = $y
EndFunc ;==>game_position
;game_init()
Func game_init($width, $height, $tile_size, $map_width, $map_height, $map_x, $map_y, $default_value)
game_resize($width, $height)
$tile_width = $tile_size * 2
$tile_height = $tile_size
$game_map_width = $map_width
$game_map_height = $map_height
$game_map_x = $map_x
$game_map_y = $map_y
$game_map_smooth_x = 0
$game_map_smooth_y = 0
$game_map_speed = $tile_height / 4
Dim $game_map[$game_map_width][$game_map_height]
;clear game_map
game_map_fill($default_value)
EndFunc ;==>game_init
;game_map_fill()
func game_map_fill($value)
For $x = 0 To $game_map_width - 1
For $y = 0 To $game_map_height - 1
$game_map[$x][$y] = $value
Next
Next
EndFunc
;game_input()
Func game_input($moveable_keyboard = False, $moveable_mouse = False, $clickable = False, $click_event = False)
Local $diffx
Local $diffy
Local $mx
Local $my
Local $map_field
Local $border = 6
;pfeiltastenbewegung
If $moveable_keyboard Then
If _IsPressed(25) Then
$game_map_smooth_x -= $game_map_speed
ElseIf _IsPressed(27) Then
$game_map_smooth_x += $game_map_speed
EndIf
If _IsPressed(26) Then
$game_map_smooth_y -= $game_map_speed
ElseIf _IsPressed(28) Then
$game_map_smooth_y += $game_map_speed
EndIf
EndIf
;mausbewegung
If $moveable_mouse Then
If $mouse_x <= $border Then
$game_map_smooth_x -= $game_map_speed
ElseIf $mouse_x >= $window_width - $border * 2 Then
$game_map_smooth_x += $game_map_speed
EndIf
If $mouse_y <= $border Then
$game_map_smooth_y -= $game_map_speed
ElseIf $mouse_y >= $window_height - $border * 2 Then
$game_map_smooth_y += $game_map_speed
EndIf
EndIf
;überlauf
If $moveable_keyboard Or $moveable_mouse Then
If $game_map_smooth_x <= 0 - $tile_width Then
$game_map_x -= 1
$game_map_y -= 1
$game_map_smooth_x = 0
ElseIf $game_map_smooth_x >= $tile_width Then
$game_map_x += 1
$game_map_y += 1
$game_map_smooth_x = 0
EndIf
If $game_map_smooth_y <= 0 - $tile_height Then
$game_map_x += 1
$game_map_y -= 1
$game_map_smooth_y = 0
ElseIf $game_map_smooth_y >= $tile_height Then
$game_map_x -= 1
$game_map_y += 1
$game_map_smooth_y = 0
EndIf
EndIf
;maustatse gedrückt
If $clickable Then
If _IsPressed(1) Or _IsPressed(2) Then
$x = $game_map_x
$y = $game_map_y
$diffx = Int(($mouse_x + $tile_width * 2 + $game_map_smooth_x) / $tile_width)
$diffy = Int(($mouse_y + $tile_height * 2 + $game_map_smooth_y) / $tile_height)
$x += $diffx
$y += $diffx
$y += $diffy
$x -= $diffy
$mx = Mod(($mouse_x + $tile_width * 2 + $game_map_smooth_x), $tile_width)
$my = Mod(($mouse_y + $tile_height * 2 + $game_map_smooth_y), $tile_height)
If $mx < $tile_width / 2 Then
If $my < $tile_height / 2 And $mx * 0.5 < ($tile_height / 2) - $my Then
$y -= 1
ElseIf $mx * -0.5 > ($tile_height / 2) - $my Then
$x -= 1
EndIf
Else
$mx -= $tile_width / 2
If $my < $tile_height / 2 And $mx * -0.5 < 0 - $my Then
$x += 1
ElseIf $mx * 0.5 > ($tile_height) - $my Then
$y += 1
EndIf
EndIf
$map_field = game_map_get($x, $y)
If $map_field Then
$click_event($x, $y, $map_field)
EndIf
EndIf
EndIf
EndFunc ;==>game_input
;game_map_get()
Func game_map_get($x, $y)
If $x >= 0 And $y >= 0 And $x < $game_map_width And $y < $game_map_height Then
Return $game_map[$x][$y]
EndIf
Return False
EndFunc ;==>game_map_get
;game_map_set()
Func game_map_set($x, $y, $value)
If $x >= 0 And $y >= 0 And $x < $game_map_width And $y < $game_map_height Then
$game_map[$x][$y] = $value
Return True
EndIf
Return False
EndFunc ;==>game_map_set
;game_draw()
Func game_draw($buffer, $event_draw)
Local $draw_left
Local $draw_top = -$tile_height * 2 - $game_map_smooth_y
Local $game_map_x_start = $game_map_x
Local $game_map_y_start = $game_map_y
Local $n = 0
Local $x
Local $y
Local $map_field
Local $tile
Local $scaled_h
Do
$x = $game_map_x_start
$y = $game_map_y_start
$draw_left = -$tile_width * 2 - $game_map_smooth_x
If Mod($n, 2) <> 0 Then
$draw_left += $tile_width / 2
$game_map_x_start -= 1
Else
$game_map_y_start += 1
EndIf
$n += 1
Do
$map_field = game_map_get($x, $y)
If $map_field Then
$tile = $event_draw($x, $y, $map_field)
$scaled_h = ($tile_width / _GDIPlus_ImageGetWidth($tile)) * _GDIPlus_ImageGetHeight($tile)
_GDIPlus_GraphicsDrawImageRect($buffer, $tile, $draw_left, $draw_top - $scaled_h + $tile_height, $tile_width, $scaled_h)
EndIf
$x += 1
$y += 1
$draw_left += $tile_width
Until $draw_left >= $window_width
$draw_top += $tile_height / 2
Until $draw_top >= $window_height + $tile_height * 2
EndFunc ;==>game_draw
Alles anzeigen
Isome Demo
#include <gdiplus.au3>
#include <misc.au3>
#include <windowsconstants.au3>
#include <guiconstants.au3>
#include <isome.au3>
$screen_width = 800
$screen_height = 600
$gui = GUICreate("Isome Demo", $screen_width, $screen_height, -1, -1, $WS_MINIMIZEBOX + $WS_SIZEBOX)
_GDIPlus_Startup()
$graphics = _GDIPlus_GraphicsCreateFromHWND($gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics($screen_width, $screen_height, $graphics)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
$tile1 = _GDIPlus_ImageLoadFromFile("tile1.png")
$tile2 = _GDIPlus_ImageLoadFromFile("tile2.png")
GUISetState()
$pos = WinGetClientSize($gui)
$screen_width = $pos[0]
$screen_height = $pos[1]
;game_init($width,$height,$tile_size,$map_width,$map_height,$map_x,$map_y,$default_value)
game_init($screen_width, $screen_height, 64, 50, 50, 10, 10, 1)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $GUI_EVENT_RESIZED
$pos = WinGetClientSize($gui)
$screen_width = $pos[0]
$screen_height = $pos[1]
game_resize($screen_width, $screen_height)
_GDIPlus_GraphicsClear($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_GraphicsClear($graphics)
$graphics = _GDIPlus_GraphicsCreateFromHWND($gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics($screen_width, $screen_height, $graphics)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
EndSwitch
$info = GUIGetCursorInfo()
If Not @error Then
game_position($info[0], $info[1])
EndIf
;game_input($moveable_keyboard = false,$moveable_mouse = false,$clickable = false,$click_event = false)
game_input(True, True, True, click_event)
_GDIPlus_GraphicsClear($buffer, 0xffffffff)
;game_draw($buffer,$event_draw)
game_draw($buffer, draw_event)
_GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
Sleep(5)
WEnd
Func click_event($x, $y, $value)
If _IsPressed(1) Then
game_map_set($x, $y, 2)
ElseIf _IsPressed(2) Then
game_map_set($x, $y, 1)
EndIf
EndFunc ;==>click_event
Func draw_event($x, $y, $value)
If $value = 1 Then
Return $tile1
ElseIf $value = 2 Then
Return $tile2
EndIf
EndFunc ;==>draw_event
Alles anzeigen
Isome Snake
#include <gdiplus.au3>
#include <misc.au3>
#include <windowsconstants.au3>
#include <guiconstants.au3>
#include <isome.au3>
$screen_width = 840
$screen_height = 400
$gui = GUICreate("Isome Snake", $screen_width, $screen_height)
_GDIPlus_Startup()
$graphics = _GDIPlus_GraphicsCreateFromHWND($gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics($screen_width, $screen_height, $graphics)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
$tile1 = _GDIPlus_ImageLoadFromFile("tile_snake1.png")
$tile2 = _GDIPlus_ImageLoadFromFile("tile_snake2.png")
$tile3 = _GDIPlus_ImageLoadFromFile("tile_snake3.png")
GUISetState()
;game_init($width,$height,$tile_size,$map_width,$map_height,$map_x,$map_y,$default_value)
game_init($screen_width, $screen_height, 32, 10, 10,4, -11, 1)
;snake
;snake init
$snake_x = random(3,6,1)
$snake_y = random(3,6,1)
$snake_length = 1
dim $snake[$snake_length][2]
$snake[0][0] = $snake_x
$snake[0][1] = $snake_x
$snake_direction =Random(1,4,1)
$current_direction = $snake_direction
;const
const $direction_right = 1
const $direction_left = 2
const $direction_top = 3
const $direction_down = 4
$gift = false
$timer = TimerInit()
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
;tastatursteuerung pfeilasten recht,links,oben,unten
;~ If _IsPressed(25) Then
;~ $snake_direction = $direction_right
;~ ElseIf _IsPressed(27) Then
;~ $snake_direction = $direction_left
;~ EndIf
;~ If _IsPressed(26) Then
;~ $snake_direction = $direction_top
;~ ElseIf _IsPressed(28) Then
;~ $snake_direction = $direction_down
;~ EndIf
;~ ;tastatursteurung pfeiltasten rechts,links
If _IsPressed(25) Then
switch $current_direction
case $direction_right
$snake_direction = $direction_down
case $direction_left
$snake_direction = $direction_top
case $direction_top
$snake_direction = $direction_right
case $direction_down
$snake_direction = $direction_left
EndSwitch
ElseIf _IsPressed(27) Then
switch $current_direction
case $direction_right
$snake_direction = $direction_top
case $direction_left
$snake_direction = $direction_down
case $direction_top
$snake_direction = $direction_left
case $direction_down
$snake_direction = $direction_right
EndSwitch
EndIf
if TimerDiff($timer) >= 300 then
;moving
$before_x = $snake[0][0]
$before_y = $snake[0][1]
$current_direction = $snake_direction
switch $current_direction
case $direction_right
$before_x-=1
case $direction_left
$before_x+=1
case $direction_top
$before_y-=1
case $direction_down
$before_y+=1
EndSwitch
;add snake lengzh if gift collision
if game_map_get($before_x,$before_y) =3 then
$snake_length += 1
redim $snake[$snake_length][2]
$snake[$snake_length-1][0] = -1
$snake[$snake_length-1][1] = -1
game_map_set($before_x,$before_y,1)
$gift = false
endif
;collision
$find_collision = false
for $i = 0 to $snake_length-1
if $before_x = $snake[$i][0] and $before_y = $snake[$i][1] then
$find_collision = true
endif
Next
if $before_x < 0 or $before_x >= 10 or $before_y < 0 or $before_y >= 10 or $find_collision then
;restart
game_map_fill(1)
$snake_x = random(3,6,1)
$snake_y = random(3,6,1)
$snake_length = 1
dim $snake[$snake_length][2]
$snake[0][0] = $snake_x
$snake[0][1] = $snake_x
$snake_direction = Random(1,4,1)
$gift = false
$current_direction = $snake_direction
else
for $i = 0 to $snake_length-1
$xb = $before_x
$yb = $before_y
$before_x = $snake[$i][0]
$before_y = $snake[$i][1]
$snake[$i][0] = $xb
$snake[$i][1] = $yb
game_map_set($before_x,$before_y,1)
game_map_set($snake[$i][0],$snake[$i][1],2)
Next
endif
if not $gift then
;new gift
do
$giftx = random(0,9,1)
$gifty = random(0,9,1)
$find_collision = false
for $i = 0 to $snake_length-1
if $giftx = $snake[$i][0] and $gifty = $snake[$i][1] then
$find_collision = true
ExitLoop
endif
Next
Until not $find_collision
game_map_set($giftx,$gifty,3)
$gift = true
endif
$timer = TimerInit()
endif
;game_input($moveable_keyboard = false,$moveable_mouse = false,$clickable = false,$click_event = false)
game_input(false, false, false, false)
_GDIPlus_GraphicsClear($buffer, 0xffffffff)
;game_draw($buffer,$event_draw)
game_draw($buffer, draw_event)
_GDIPlus_GraphicsDrawImage($graphics, $bitmap, 0, 0)
Sleep(5)
WEnd
Func draw_event($x, $y, $value)
If $value = 1 Then
Return $tile1
ElseIf $value = 2 Then
Return $tile2
elseif $value = 3 Then
Return $tile3
EndIf
EndFunc ;==>draw_event
Alles anzeigen
Hallo Cape-City
Da ich zurzeit auch wieder hier ab und an unterwegs bin hab ich deine schicke infobox entdeckt.
Ein schönes Skript und sauber programmiert . Außer dem nervenden Sound alles top ... Gute Arbeit
Kleiner Vorschlag
Der Weiße Rand des oberen roten Textes ist ziemlich kantig. Wenn man länger drauf guckt tuts in den Augen weh
Hexagon (Grafikprogramm)
Build 1.005
Einleitung
Liebe AutoIt Gemeinde
Ich programmiere nun schon seit einigen Jahren und bin ab und an auf einigen Foren unterwegs und muss aber feststellen das dieses Forum mit Abstand das beste im ganzen Netzt bleibt/ist/bleiben wird . Leider komm ich nicht mehr so häufig dazu in AutoIt zu programmieren. Das liegt daran das ich mich eher mit serverseitigen Programmiersprachen beschäftige und wenn mal nicht dann brauch ich ordentlich Power und da scheiter ich bei AutoIt (Liegt natürlich an meiner Faulheit, AutoIt würde das locker packen
). So hatte ich dieses Programm auch zunächst versucht in AutoIt zu realisieren.
Nun möchte ich euch ein Programm vorstellen womit ich mich die letzten Tage beschäftigt habe.
Also schreibt gerne wie es euch gefällt ob ihr ein Bug entdeckt habt oder Verbesserungsvorschläge habt.
Ich freu mich und bin gespannt.
Idee
Ein guter Freund von mir zeichnete immer diese Sechsecke und brachte ganz verrückte Formen hervor. Das faszinierte mich und so enstand dann auch die Idee hierfür.
Programm
Die Anwendung wurde in PureBasic (5.3) geschrieben.
Für die grafische Ausgabe wird die cairo lib verwendet (https://www.cairographics.org/)
Für die Musikwiedergabe und Höhenwerte wird die bass lib verwendet (http://www.un4seen.com/)
Alle benötigten Bibliotheken sind in der Zip Datei vorhanden.
To-Do´s für nächste Version:
- Videoaufnahme
- Neuer Mixervorlagen
- Mixervorlagen öffnen und speichern
Bilder
[Blockierte Grafik: http://fs5.directupload.net/images/161128/9n2nu53d.jpg]
[Blockierte Grafik: http://fs5.directupload.net/images/161128/c7kzicio.jpg]
Bedienung
Öffnet die Hexagon.exe. Zunächst klickt auf den mittleren weißen Punkt und ab da probiert einfach mal ein bißchen aus
Im oberen Bereich des Fensters ist die Menüleiste.
Funktionen der einzelnen Button:
H | Sechsecke werden neu animiert |
Dokument + | Alle Würfel löschen |
Dokument (Pfeil runter) | Datei laden |
Dokument (Pfeil hoch) | Datei speichern |
Zeiger | Sechseckseiten können ein- und ausgeblendet werden |
Gruppenfarbe 1-9 | Jede Sechseckseite kann einer Gruppe zugewiesen werden Jede Gruppe kann koloriert werden (Mit Doppelklick erscheint ein Farbfenster) |
Hintergrundfarbe | Ändert die Hintergrundfarbe (Mit Doppelklick erscheint ein Farbfenster) |
Links, Rechts, Oben, Unten | Zeichenoberfläche bewegen (Auch mit den Pfeiltasten oder Klicken und Ziehen der Maus) |
Zoom In, Zoom Out | Zeichenoberfläche zoomen (Mausrad) |
Vorschau | Vorschaumodus ein- und ausblenden Im Vorschaumodus werden Buttons und das Menü nach einiger Zeit ausgeblendet (Leertaste) |
Vollbild | Vollbild ein- und ausblenden |
Plugin Record | Erstellt PNG Datei |
Plugin Bass |
Einfacher Klick: Öffnent Auswahlfenster für Mp3 Datei und spielt diese mit erfolgreichen Laden ab Linksklick: Öffnet Einstellungen Mixer Hier könnt ihr euch richtig austoben wer das Prinzip versteht kann hier alle Möglichen Farbmischungen hervorholen. (Sollte es dazu Fragen geben einfach stellen und ich werde es ausführlich erklären ![]() (Es liegen bis jetzt drei Vorlagen vor) |
Plugin Rotate |
Einfacher Klick: Zeichenfläche wird Rotiert bis Leertaste oder Button erneut gedrückt wird Linksklick: Öffnet Einstellungen |
Plugin Random |
Einfacher Klick: Ändert zufällig die Gruppen der Würfel Doppelklick: Erstellt zufällig Würfel Linksklick: Öffnet Einstellungen |
hey leute
super interessant das thema und spannend wie hier an allen ecken und kanten optimiert wird
hier mal meine testergebnisse.
Andy:
ASM:
: $pi Leibnitz = 3.14159255358581
: Time [ms] = 19.2128344097284
UEZ:
VS2015_C++_Leibniz-PI_x64
Pi: 3.1415925535897915 38.149658000000002 ms.
VS2015_C++_Leibniz-PI_x86:
Pi: 3.1415925535897915 38.162696000000004 ms.
FB_Leibniz-PI_x86
PI: 3.141592553589792 88.51868021884002 ms for 10000000 iterations.
mein pc:
intel core i3-4170 3.7ghz
win10x64
8 gb ram
Sieht gut und solide aus.
Der Abschnitt in dem der Bonus-Punkt gesetzt wird kommt doppelt vor evt. in eine Funktion packen
Danke fürs Feedback.
Die Fehler bzw. Verbesserungsvorschläge sind allesamt sehr Hilfreich. Vielen Dank dafür.
Ich versuche in nächster Zeit am Projekt weiter zuarbeiten und die Vorschläge umzusetzen.
Welche Windows Version verwendest du? Die Werkzeugleiste sollte unter WinXP laufen
Danke. Tipp wird umgesetzt
[Blockierte Grafik: http://www11.pic-upload.de/17.01.15/8ca7qqjaj7f5.png]
Guten Abend
Ich stelle euch ein Programm vor mit dem Ihr mit GDI und GDIPlus zeichnen könnt.
Das Programm befindet sich in der Entwicklung. Zurzeit kann man nur Rechtecke, Ellipsen und Linien zeichnen. Die Füllfarbe, Linienbreite, Linienfarbe kann festgelegt werden.
Alle Objekte können selektiert,kopiert, eingefügt, gelöscht, frei bewegt und transformiert werden. Ihr könnt euer Projekt speichern und später wieder öffnen. Ihr könnt das Ergebnis als Bild speichern oder für AutoIt die GDI Zeichenfunktionen exportieren.
Ein Gitter zur übersicht kann induviduell angepasst werden.
Getestet unter Microsoft Windows XP 32Bit SP3 ; AutoIt v.3.3.10.2
Das Programm befindet sich im Anhang
PS: Bitte alle Fehler und Vorschläge posten damit ich diese Beheben bzw. Umsetzen kann
Danke
Den Code hätte man natürlich optimieren können allerdings hatte ich mir vor dem Video keine wirklichen Gedanken drüber gemacht und wollte nicht im Video zeigen wie ich versuch den Code zu optimieren.
Danke.
Entweder habe ich davor nie wirklich hingeguckt oder ich habe sowelche Uhren schonmal gesehen Interessant.
[Blockierte Grafik: http://fs1.directupload.net/images/141215/8bcq6qym.png]
Ich habe eine grafische Uhr in AutoIt programmiert.
Das ganze ist nichts großes. Allerdings ist es mein erstes Programm wo ich den Vorgang als Video für YouTube aufgenommen habe. Also mein erstes YouTube-Video :).
Hier die Links.
Teil 1: https://www.youtube.com/watch?v=1c53XnOzsq8
Teil 2: https://www.youtube.com/watch?v=VJTN44uo7HM
Freue mich über Kritik.
Hier der Code:
[autoit]#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
Global $window
Global $window_size = 500
Global $window_title = "Uhr"
Global $window_timer
Global $graphics
Global $bitmap
Global $buffer
Global $pen
Global $pen_minute, $pen_hour, $pen_second
Global $PI = 3.14159265359
[/autoit][autoit][/autoit][autoit]init()
[/autoit][autoit][/autoit][autoit]func init()
$window = GUICreate($window_title,$window_size,$window_size)
_GDIPlus_Startup()
[/autoit][autoit][/autoit][autoit]$graphics = _GDIPlus_GraphicsCreateFromHWND($window)
$bitmap = _GDIPlus_BitmapCreateFromGraphics($window_size,$window_size,$graphics)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
$pen = _GDIPlus_PenCreate(0xFF333333,10)
$pen_minute = _GDIPlus_PenCreate(0xFFDDDDDD,3)
$pen_hour = _GDIPlus_PenCreate(0xFF666666,3)
$pen_second = _GDIPlus_PenCreate(0xFFFF0000,2)
_GDIPlus_GraphicsSetSmoothingMode($buffer,2)
[/autoit][autoit][/autoit][autoit]GUISetState(@SW_SHOW,$window)
[/autoit][autoit][/autoit][autoit]$window_timer = TimerInit()
[/autoit][autoit][/autoit][autoit]main()
EndFunc
func main()
Do
if TimerDiff($window_timer) >= 30 then
$window_timer = TimerInit()
update()
EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE
close()
EndFunc
func close()
_GDIPlus_PenDispose($pen)
_GDIPlus_PenDispose($pen_minute)
_GDIPlus_PenDispose($pen_hour)
_GDIPlus_PenDispose($pen_second)
_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_Shutdown()
[/autoit][autoit][/autoit][autoit]GUIDelete($window)
EndFunc
Func update()
_GDIPlus_GraphicsClear($buffer,0xFFFFFFFF)
_GDIPlus_GraphicsDrawEllipse($buffer,50,50,$window_size-100,$window_size-100,$pen)
[/autoit][autoit][/autoit][autoit]$rad = 0
$diff = ($PI*2) / 12
Do
_GDIPlus_GraphicsDrawLine($buffer,$window_size/2+sin($rad)*180,$window_size/2+cos($rad)*180,$window_size/2+sin($rad)*200,$window_size/2+cos($rad)*200,$pen)
$rad += $diff
Until $rad >= $PI*2
;minute
$rad = -(($PI*2) / 60) *@MIN-$PI
$value = 150
_GDIPlus_GraphicsDrawLine($buffer,$window_size/2,$window_size/2,$window_size/2+sin($rad)*$value,$window_size/2+cos($rad)*$value,$pen_minute)
;hour
$rad = -(($PI*2) / 12) *@HOUR-$PI
$value = 80
_GDIPlus_GraphicsDrawLine($buffer,$window_size/2,$window_size/2,$window_size/2+sin($rad)*$value,$window_size/2+cos($rad)*$value,$pen_hour)
;second
$rad = -(($PI*2) / 60) *@SEC-$PI
$value = 170
_GDIPlus_GraphicsDrawLine($buffer,$window_size/2,$window_size/2,$window_size/2+sin($rad)*$value,$window_size/2+cos($rad)*$value,$pen_second)
_GDIPlus_GraphicsDrawImage($graphics,$bitmap,0,0)
EndFunc
hey leute ich bin gabriel, 19 jahre alt und komme aus berlin
ich programmiere schon seit längerem in verschieden bereichen.
leider hab ich bis jetzt keine leute gefunden mit den ich größe projekte meistern könnte
zurzeit programmiere ich ein cms, browserspiel und andere sachen. das problem bei der sache ist das die sachen zwar alle funktionieren aber doch nicht mehr so schön sind wie sie sein sollten. ich denke mit paar anderen leute könnten das richtig gute sachen werden.
also wenn du lust auf größere projekte hast würde ich mich freuen wenn wir zusammen arbeiten könnten. ich freue mich natülich auch wenn ihr ideen und wünsche habt von sachen die ihr programmieren wollt.
kurz gesagt ich würde gerne mit einem team verschiedene projekte machen
vorraussetzung
es wäre cool wenn du aus berlin oder der umgebung kommst.
du solltest ahnung von PHP, HTML, CSS, JavaScript, SQL, Apache oder JQuery haben ( du musst nicht alles können).
wenn du lieber in Java, AutoIt oder PureBasic arbeitest können wir das auch machen.
oder du schreibst mir einfach in was du gerne arbeitest. cool wären auch leute die grafiken machen können
ich würde mich freuen über einige mitteilungen
bei fragen schreibt mich einfach an
schöne grüße
Gabriel
werden die events nicht erst ausgeführt wenn man das inputfeld wieder verlässt?
habe lange nichts mehr in autoit gemacht.die lösung ist keine gute aber eine lösung
wenn der fokus auf dem input liegt wird der button unsichtbar wenn der fokus das input verlässt erscheint der button wieder
#include <winapi.au3>
[/autoit][autoit][/autoit][autoit]$gui = GUICreate("example", 623, 442, 192, 114)
$button = GUICtrlCreateButton("Button1", 190, 140)
$button2 = GUICtrlCreateButton("Button2", 190, 170)
$input = GUICtrlCreateInput("Input", 60, 140, 121, 21)
GUISetState()
$timer = TimerInit()
[/autoit][autoit][/autoit][autoit]While true
switch GUIGetMsg()
case -3
GUIDelete($gui)
Exit
EndSwitch
if TimerDiff($timer>1000) Then
if _WinAPI_GetFocus() = GUICtrlGetHandle($input) then
if GUICtrlGetState($button) = 80 Then
GUICtrlSetState($button,32)
EndIf
else
if GUICtrlGetState($button) = 96 Then
GUICtrlSetState($button,16)
EndIf
endif
$timer = TimerInit()
EndIf
WEnd