Also bei mir funktioniert das ohne Probleme! ![]()
Ich hab dir mal dein Projekt als .isp Datei angehängt...so hats bei mir auf jeden fall funktioniert...
(.isp Dateien kannst du in der Projektverwaltung importieren...das Projekt heißt test)
Also bei mir funktioniert das ohne Probleme! ![]()
Ich hab dir mal dein Projekt als .isp Datei angehängt...so hats bei mir auf jeden fall funktioniert...
(.isp Dateien kannst du in der Projektverwaltung importieren...das Projekt heißt test)
@131738
OK ich werde in der nächsten Version die Zeile wieder einbauen...aber sie wird nur aktiv wenn als Sprache die china.lng gewählt ist, ok?
cool...die GuiFrame-UDF kannte ich noch nicht...
Hmm...sieht fast so aus..naja macht nichts...hab wieder was gelernt ![]()
ok das ist etwas anderes...
- hast du deine .isf Datei (GUI) via include eingebunden?
- steht das GUISetState(@SW_SHOW,$Test) auch irgentwo NACH dem include und nicht davor?
- ist $Test auch wirklich das Handle zu deiner GUI? (Kanst du prüfen indem du deine .isf Datei öffnest und unter GUI Eigenschaften -> Handle der GUI findest du das Handle...)
also auch das mit der $GUI_EVENT_CLOSE die er nicht findet?! Oder ist es bei dir etwas anderes?!
Hi!
Da ich gerade etwas am Neuentwerfen einiger Funktionen meines ISN AutoIt Studios bin hab ich mir gedacht die neue Splitterfunktion ist auch für einige von euch sicherlich brauchbar:
Was macht diese UDF?
-> Sie lässt euch leicht beliebig viele Controls in eine GUI packen die ihr dann mittels Splitter in der Größe verschieben könnt! So könnt ihr euer Fenster zb. in mehrere Teile unterteilen...so wie es auch im ISN AutoIt Studio gemacht wurde (nur da hab ichs noch viel komplizierter gemacht...)
Vielleicht kann´s ja mal wer brauchen...
#cs ----------------------------------------------------------------------------
Splitting Techdemo for ISN AutoIt Studio 1.0
Zeigt wie diverse Controls in eine GUI eingefügt werden können und mittels Splitter in der Größe verändert werden können (horizontal & Vertikale Splitter sind möglich)
#ce ----------------------------------------------------------------------------
Opt("GUIOnEventMode", 1) ;0=disabled, 1=OnEvent mode enabled
Opt("GUICloseOnESC", 1) ;1=ESC closes, 0=ESC won't close
Opt("GUIResizeMode", 802) ;0=no resizing, <1024 special resizing
Global $Splitter_Rand = 3 ;Rand zwischen einem Control und dem Controlsplitter
Global $Splitter_Minimale_Groesse = 100 ;Minimale Groesse die ein Control im Splittersystem haben kann
Global $User32_dll_handle = DllOpen("user32.dll") ;Handle der user32.dll für zb. _IsPressed
;Kleine TestGUI
#include <GuiComboBox.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <Misc.au3>
$Form1 = GUICreate("Form1", 683, 614, -1, -1, bitor($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX, $WS_MAXIMIZEBOX))
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit", $Form1)
GUISetOnEvent($GUI_EVENT_RESIZED, "_Aktualisiere_Splittercontrols", $Form1)
GUISetOnEvent($GUI_EVENT_RESTORE, "_Aktualisiere_Splittercontrols", $Form1)
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "_Aktualisiere_Splittercontrols", $Form1)
$Links = GUICtrlCreateEdit("", 24, 56, 153, 273)
GUICtrlSetData(-1, "Links")
$Label1 = GUICtrlCreateLabel("", 200, 48, 5, 308, -1, $SS_BLACKFRAME)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetCursor(-1, 13)
GUICtrlSetOnEvent(-1, "_move_Splitter")
$Mitte = GUICtrlCreateEdit("", 249, 58, 153, 273)
GUICtrlSetData(-1, "Edit1")
$Rechts = GUICtrlCreateEdit("", 438, 25, 153, 273)
GUICtrlSetData(-1, "Edit1")
$Label2 = GUICtrlCreateLabel("", 406, 34, 5, 308, -1, $SS_BLACKFRAME)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetCursor(-1, 13)
GUICtrlSetOnEvent(-1, "_move_Splitter")
$Unten = GUICtrlCreateEdit("", 71, 419, 497, 113)
GUICtrlSetData(-1, "Edit1")
$Label3 = GUICtrlCreateLabel("", 17, 366, 652, 5, -1, $SS_BLACKFRAME)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetCursor(-1, 11)
GUICtrlSetOnEvent(-1, "_move_Splitter")
$testinput = guictrlcreateinput("lalal", 10, 10, 200, 20)
GUISetState(@SW_SHOW)
_Aktualisiere_Splittercontrols()
[/autoit][autoit][/autoit][autoit]While 1
sleep(100)
WEnd
; #FUNCTION# ;===============================================================================
;
; Name...........: _Aktualisiere_Splittercontrols
; Description ...: Wird verwendet um die Position der Controls und die Splitter zu aktualisieren
; Syntax.........: _Aktualisiere_Splittercontrols()
; Parameters ....: Keine
; Return values .: Keine
; Author ........: ISI360
; Modified.......:
; Remarks .......: Wird zb. auch in der Funktion _move_Splitter() aufgerufen
; Alle Controls die im Splittersystem verwendet werden sollen MÜSSEN hier aufgeführt sein!
; Related .......:
; Link ..........; http://www.isnetwork.at.pn
; Example .......;
;
; ;==========================================================================================
func _Aktualisiere_Splittercontrols()
;Weise zuerst (!!) die Controls den Splittern zu...
_Add_control_to_Splitter($Form1, $Links, -1, $Label1, -1, $Label3)
_Add_control_to_Splitter($Form1, $Mitte, $Label1, $Label2, -1, $Label3)
_Add_control_to_Splitter($Form1, $testinput, $Label2, -1, -1, $Rechts)
_Add_control_to_Splitter($Form1, $Rechts, $Label2, -1, $testinput, $Label3)
_Add_control_to_Splitter($Form1, $Unten, -1, -1, $Label3, -1)
;...und lasse danach die Splitter selbst Teil des Systems sein (Wichtig!)
_Add_control_to_Splitter($Form1, $Label1, $Links, $Mitte, -1, $Label3)
_Add_control_to_Splitter($Form1, $Label2, $Mitte, $rechts, -1, $Label3)
_Add_control_to_Splitter($Form1, $Label3, -1, -1, $Mitte, $unten)
endfunc
; #FUNCTION# ;===============================================================================
;
; Name...........: _Add_control_to_Splitter
; Description ...: Fügt ein beliebiges Control in ein Splittersystem ein. Dabei müssen jeweils die Handles der Splitter angegeben werden
; Syntax.........: _Add_control_to_Splitter($control, $splitter_left, $splitter_right, $splitter_top, $splitter_down)
; Parameters ....: $hgui - Handle zum GUI Fenster in dem sich die Controls und Splitter befinden
; $control - Handle zum Control welches in das Splittersystem eingefügt werden soll
; $splitter_left - Handle zum nächstgelegenen linken Splitter (Bei -1 wird der linke GUI-Rand verwendet)
; $splitter_right - Handle zum nächstgelegenen rechten Splitter (Bei -1 wird der rechte GUI-Rand verwendet)
; $splitter_top - Handle zum nächstgelegenen Splitter über dem Control (Bei -1 wird der obere GUI-Rand verwendet)
; $splitter_down - Handle zum nächstgelegenen Splitter unter dem Control (Bei -1 wird der untere GUI-Rand verwendet)
; Return values .: 1 - Erfolg
; 0 - Control konnte nicht in das Splittersystem integriert werden
; Author ........: ISI360
; Modified.......:
; Remarks .......: Kann auch zum Aktualisieren der Positionen eines Controls genutzt werden (zb. durch _move_Splitter())
; Related .......:
; Link ..........: http://www.isnetwork.at.pn
; Example .......:
;
; ;==========================================================================================
func _Add_control_to_Splitter($hgui = "", $control = "", $splitter_left = -1, $splitter_right = -1, $splitter_top = -1, $splitter_down = -1)
if $hgui = "" then return 0 ;error
if $control = "" then return 0 ;error
;Definiere verwendete Variablen
Local $position_splitter_links
Local $position_splitter_rechts
Local $position_splitter_unten
Local $position_splitter_oben
Local $x
Local $y
Local $breite
Local $hoehe
;Hole Positionen von den angegebenen Splittern und der GUI
;splitter/guirand links
if $splitter_left <> -1 Then
$position_splitter_links = ControlGetPos($hgui, "", $splitter_left)
Else
$position_splitter_links = WinGetClientSize($hgui, "")
endif
;splitter/guirand rechts
if $splitter_right <> -1 Then
$position_splitter_rechts = ControlGetPos($hgui, "", $splitter_right)
Else
$position_splitter_rechts = WinGetClientSize($hgui, "")
endif
;splitter/guirand oben
if $splitter_top <> -1 Then
$position_splitter_oben = ControlGetPos($hgui, "", $splitter_top)
Else
$position_splitter_oben = WinGetClientSize($hgui, "")
endif
;splitter/guirand unten
if $splitter_down <> -1 Then
$position_splitter_unten = ControlGetPos($hgui, "", $splitter_down)
Else
$position_splitter_unten = WinGetClientSize($hgui, "")
endif
;Berechene Positionen
;x
if $splitter_left <> -1 Then
$x = $position_splitter_links[0] + $position_splitter_links[2] + $Splitter_Rand
Else
$x = $Splitter_Rand
endif
;y
if $splitter_top <> -1 Then
$y = $position_splitter_oben[1] + $position_splitter_oben[3] + $Splitter_Rand
Else
$y = $Splitter_Rand
endif
;breite
$breite = ($position_splitter_rechts[0] - $x) - $Splitter_Rand
;höhe
$hoehe = ($position_splitter_unten[1] - $y) - $Splitter_Rand
;Setze neue Positionen für das Control
guictrlsetpos($control, $x, $y, $breite, $hoehe)
;Fertig ![]()
return 1
EndFunc
; #FUNCTION# ;===============================================================================
;
; Name...........: _move_Splitter
; Description ...: Verschiebt durch gedrückthalten der linken Maustaste einen Splitter
; Syntax.........: _move_Splitter()
; Parameters ....: Keine
; Return values .: 1 - Erfolg
; 0 - Fehler
; Author ........: ISI360
; Modified.......:
; Remarks .......: Muss durch eine GUICtrlSetOnEvent funktion aufgerufen werden
; Erkennt automatisch ob es sich bei dem Splitter um einen Horizontalen oder Vertikalen Splitter handelt
; Erkennt automatisch die Controls (dank dllcall) die den Splitter betreffen und achtet auf die Minimalgröße ($Splitter_Minimale_Groesse)
; Related .......:
; Link ..........: http://www.isnetwork.at.pn
; Example .......:
;
; ;==========================================================================================
func _move_Splitter()
if @GUI_CtrlId = "" then Return 0
if @GUI_WinHandle = "" then Return 0
;Definiere verwendete Variablen
Local $position_splitter
Local $Position_Maus1
Local $Position_Maus2
Local $x_Differenz
Local $y_Differenz
Local $x
Local $y
Local $breite
Local $hoehe
Local $handle_element_oben
Local $position_element_oben
Local $handle_element_unten
Local $position_element_unten
Local $handle_element_rechts
Local $position_element_rechts
Local $handle_element_links
Local $position_element_links
$position_fenster = WinGetPos(@GUI_WinHandle) ;aktuelle Position des Fensters
$position_fenster_clientsize = WinGetClientSize(@GUI_WinHandle) ;Clientsize des aktuellen fensters
$position_splitter = ControlGetPos(@GUI_WinHandle, "", @GUI_CtrlId) ;aktuelle Position des Splitters
$Position_Maus1 = MouseGetPos() ;hole mausposition
$x_Differenz = $Position_Maus1[0] - $position_splitter[0] ;x differenz vom control zur mausposition
$y_Differenz = $Position_Maus1[1] - $position_splitter[1] ;y differenz vom control zur mausposition
While _IsPressed('01', $User32_dll_handle)
$Position_Maus1 = MouseGetPos() ;hole mausposition
sleep(10) ;warte ganz kurz...
$Position_Maus2 = MouseGetPos() ;hole 2. mausposition
if $Position_Maus1 <> $Position_Maus2 Then ;falls sich mauszeiger bewegt hat...
if $position_splitter[3] > $position_splitter[2] then ;prüfe ob es sich um einen horizontalen oder vertikalen splitter handelt
$x = $Position_Maus1[0] - $x_Differenz
$y = $position_splitter[1]
if $x < $Splitter_Rand then $x = $Splitter_Rand ;falls splitter aus der GUI wandert
if $x > $position_fenster_clientsize[0] then $x = $position_fenster_clientsize[0] - $Splitter_Rand ;falls splitter aus der GUI wandert
;Prüfe welches Control sich links und rechts neben dem Splitter befindet und prüfe desen größe...
$position_splitter = ControlGetPos(@GUI_WinHandle, "", @GUI_CtrlId) ;aktuelle Position des Splitters
$handle_element_links = DllCall("user32.dll", "hwnd", "WindowFromPoint", "int", ($position_fenster[0] + $position_splitter[0]) - ($Splitter_Rand + 50), "int", $position_fenster[1] + $position_splitter[1] + $Splitter_Rand + 50) ;suche control nach x und y koordinaten
$position_element_links = ControlGetPos(@GUI_WinHandle, "", $handle_element_links[0]) ;aktuelle Position des linken Elements des Splitters
$handle_element_rechts = DllCall("user32.dll", "hwnd", "WindowFromPoint", "int", ($position_fenster[0] + $position_splitter[0]) - ($Splitter_Rand - 50), "int", $position_fenster[1] + $position_splitter[1] + $Splitter_Rand + 50) ;suche control nach x und y koordinaten
$position_element_rechts = ControlGetPos(@GUI_WinHandle, "", $handle_element_rechts[0]) ;aktuelle Position des rechteb Elements des Splitters
if IsArray($position_element_links) Then
if $x - ($position_element_links[0]) < $Splitter_Minimale_Groesse then $x = $position_splitter[0]
endif
if IsArray($position_element_rechts) Then
if ($position_element_rechts[0] + $position_element_rechts[2]) - $x < $Splitter_Minimale_Groesse then $x = $position_splitter[0]
endif
GUICtrlSetPos(@GUI_CtrlId, $x, $y) ;setze Splitterposition für vertikalen Splitter
Else
$x = $position_splitter[0]
$y = $Position_Maus1[1] - $y_Differenz
if $y < $Splitter_Rand then $y = $Splitter_Rand ;falls splitter aus der GUI wandert
if $y > $position_fenster_clientsize[1] then $y = $position_fenster_clientsize[1] - $Splitter_Rand ;falls splitter aus der GUI wandert
;Prüfe welches Control sich ober und unterhalb dem Splitter befindet und prüfe desen größe...
$position_splitter = ControlGetPos(@GUI_WinHandle, "", @GUI_CtrlId) ;aktuelle Position des Splitters
$handle_element_oben = DllCall("user32.dll", "hwnd", "WindowFromPoint", "int", $position_fenster[0] + $position_splitter[0] + 50, "int", ($position_fenster[1] + $position_splitter[1]) - 50) ;suche control nach x und y koordinaten
$position_element_oben = ControlGetPos(@GUI_WinHandle, "", $handle_element_oben[0]) ;aktuelle Position des oberen Elements des Splitters
$handle_element_unten = DllCall("user32.dll", "hwnd", "WindowFromPoint", "int", $position_fenster[0] + $position_splitter[0] + 50, "int", ($position_fenster[1] + $position_splitter[1]) + 50) ;suche control nach x und y koordinaten
$position_element_unten = ControlGetPos(@GUI_WinHandle, "", $handle_element_unten[0]) ;aktuelle Position des unteren Elements des Splitters
if IsArray($position_element_oben) Then
if $y - $position_element_oben[1] < $Splitter_Minimale_Groesse then $y = $position_splitter[1]
endif
if IsArray($position_element_unten) Then
if ($position_element_unten[1] + $position_element_unten[3]) - $y < $Splitter_Minimale_Groesse then $y = $position_splitter[1]
endif
GUICtrlSetPos(@GUI_CtrlId, $x, $y) ;setze Splitterposition für horizontalen Splitter
endif
_Aktualisiere_Splittercontrols() ;aktualisiere die Controls und andere Splitter beim bewegen des Splitters
EndIf
WEnd
_Aktualisiere_Splittercontrols() ;Finale aktualisierung
Return 1 ;Fertig
EndFunc
func _exit()
Exit
endfunc
@Raupi:
Danke! Den Grafikbug konnte ich wirklich mit _WINDOW_REBUILD() beheben....
Und wegen unlesbarem Code...ja da stimme ich dir zu...ist ja auch ein rießen Projekt...aber ich plane sowiso die Version 1.0 parallel zu den aktuellen Beta Versionen zum Teil neu zu schreiben und so mehr ordnung in das Chaos zu bringen...^^
Und ja das mit den Includes wäre ne gute Idee...mal schauen wie es sich umsetzen lässt ![]()
Nein Abbrev..also die Abkürzungen funktionieren noch nicht...
Geplant noch nicht...wäre aber eine gute Idee ![]()
ja stimmt meinte natürlich child ![]()
ok thx
thx fürs testen!
Der Grafikbug im Formstudio ist mir bereits bekannt...nur hab ich bis jetzt keinen Plan wie ich den Bug beheben soll....Anscheinend schmekt es dem Formstudio nicht parrent von ISN zu sein...ohne parrent läuft es ohne Probleme....
Und warum das nach 1x resizen normal funktioniert verstehe ich noch weniger... ![]()
Die anderen Resizebugs werde ich mir anschauen...thx
Änderungen 0.86 BETA:
--> ISN AutoIt Studio: <--
-----------------------------------
- Bugfix: Titel des Skriptbaumes bleibt nun wo er sein soll ![]()
- Bugfix: Beim Maximieren/Minimieren/Wiederherstellen wird nun der Skriptbaum nicht mehr Aktualisiert
- Bugfix: Bugfix beim Prüfen ob eine Datei extern bearbeitet wurde
- NEU: Das alte Rich-Edit Consolen Fenster wurde durch ein Scintilla Control ersetzt (thx to ApudAngelorum )
--> ISN Form Studio 2: <--
-----------------------------------
- Bugfix: Formgröße wurde nicht korrekt gespeichert
- Bugfix: Diverse Bugfixes
Das "eigentlich" gefällt mir
![]()
![]()
Naja aber auch egal, somit haben wir schon mal wieder 2 Bugfixes, was uns allen zu Gute kommt
Stimmt! ![]()
Na dann viel Spaß beim Füttern! ![]()
Ne ich hab das erst mit der 0.85er eingebaut...aber ziehmlich am Anfang der Entwicklung...
Und ne hatte auch mit dem FileViewer nichts zu tun...
![]()
Ja das stimmt jedoch sollte es damit eigentlich nichts zu tun haben...eigentlich..^^
Und das aktualisieren des Skriptbaumen nach dem maximieren werde ich ab version 0.86 auch deaktivieren...in dieser Zeit kann ja eh keiner was umschreiben da drin ![]()
AAAHHH!! Ich habs gefunden!!!
Der Fehler hat sich in der _SciLexer.au3 versteckt. Ich habe damals diese Änderung gemacht (ist schon lange her...) wegen Info eines Chinesischen Users....
Und da es bei mir keine Fehler mache lies ich es drinnen...
Warum diese Zeichen jetzt nur bei dieser au3 Datei von dir aufgetreten sind kann ich mir zwar noch immer nicht erklären...aber egal...es geht wieder! ![]()
Ich werde versuchen dieses Wochenende noch die 0.86 BETA zu releasen...damit sollten die Probleme nun behoben sein! ![]()
thx für deine Mittarbeit! ![]()
Danke für deine Testdatei...sehr komisch das ganze...
Bei mir ist genau das selbe ![]()
Ich mach mich mal auf die Suche nach dem Fehler....
Wirklich sehr komisch....
Sonst kürze in deinem Skript einfach 3/4 Weg...
Es muss eh nicht lauffähig sein...Es geht mir nur um das Ende des Skripts (also die komischen Zeichen ^^)
![]()
hmm das ist Interessant...
Wenn du deine .au3 Datei mit SciTE öffnest siehst du dan diese Zeichen?
Kannst du mir eine von deinen au3 Dateien zukommen lassen zum Testen?! (isi.3d@gmx.at)
Jaja schon cool so ne console
(gibts aber auch erst seit dieser Version)
Scrollfähig:
_ArrayDisplay(StringSplit ($FILE_CACHE[0],@cr,2))
und das kannst du auch noch testen:
_ArrayDisplay(StringSplit (Sci_GetLines($SCE_EDITOR[0]),@cr,2))
-> Hier wird der Code direkt aus dem Editor geladen...genau dies wird dann in die au3 Datei geschrieben...
Wegen den Zeichen:
Probier mal folgendes:
- Beende ISN
- Öffne die config.ini (im Data Ordner) und erstelle einen neuen Key in der Section [config]
showdebugconsole=true
- Starte ISN und du solltest ein Debug Fenster sehen...
- Öffne nun dein Projekt und prüfe das nur 1 Tab geöffnet ist (nämlich der mit deinem Skript)
- Nun gib folgendes in das Konsolenfenster ein: (in das Inputfeld unter dem schwarzen Feld)
msgbox(0,"Cache0",$FILE_CACHE[0])
- Bestätige mit ENTER....nun solltest du eine MessageBox sehen in dem dein Code steht...
- Siehst du hier am Ende auch schon komische Zeichen?!?
-> -> bzw. kannst du ein kurzes Skript posten in dem solche Zeichen vorhanden sind...
Ich habe echt keinen Plan wo die herkommen ![]()