Koordinaten relativ zu einem bestimmten control

  • Hi Leute,
    gibt es eine kurze Möglichkeit Controls relativ zu einem bestimmten control auszurichten, also wie Opt("GUICoordMode", 0), nur eben nicht zum letzten sondern zu einem bestimmten Control. Das würde einiges an Code und absoluten X,Y Werte einsparen.

    Man könnte es mit ControlGetPos() lösen, aber so spart man keinen Code und bequemer wirds dadurch auch nicht.

    Weiß jemand wo die Funktion Opt definiert ist, vllt. ist es möglich sie zu erweitern?
    Danke!

  • Mir fällt im Moment kein cleverer Trick ein um das exakt so umzusetzen, wie du es beschrieben hast. Kannst du evtl. anhand eines Beispiels oder mit etwas Code zeigen wie du die Controls positionieren willst? Möglicherweise reicht auch schon simple Mathematik.
    Und die Funktion Opt ist in AutoIt selbst definiert, da kommst du auf legalem Wege nicht ran :P. Und die Funktion zu erweitern wäre auch sicherlich nicht so einfach wie du es dir vorstellst.

  • Jetzt hast du die Büchse der Pandora geöffnet mein Freund :D

    Helfen kann man mir nicht, ist einfach schon zu viel Code und dir fehlen die module.
    [Blockierte Grafik: http://img11.imageshack.us/img11/2909/e37.png]

    Wird ein mega nützliches Programm. Allerdings nicht so schwul wie alle anderen Wim Modifier die noch alle die Batch im Hintergrund benutzen bzw. die Powershell snippets. Meine Funktionen greifen alle direkt auf die jeweiligen apis zu, dazu habe ich die DISM API von Windows 8 in AutoIT geschrieben, die es mir erlaubt direkt updates etc zu integrieren um das nur als Beispiel zu nennen. Die anderen machen das alle noch über die Dism.exe. Layout technisch will ich es an dieser stelle nicht vergleichen :D
    Die UDF zu DISM habe ich vor 4 Monaten unter Projekte hochgeladen, falls jemand Interesse hat!

    Hier mal ein kurzer Auszug vom Main GUI:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <String.au3>
    #include <ListViewConstants.au3>
    #include <GuiTab.au3>
    #include <TreeViewConstants.au3>
    #include <GuiListBox.au3>
    #include <StructureConstants.au3>
    #include <GuiListView.au3>
    #include <UpDownConstants.au3>
    #include <File.au3>
    #include <GuiTreeView.au3>

    [/autoit][autoit][/autoit][autoit]

    ; #Libraries# ===================================================================================================================
    #include "libs/DISM.au3"
    #include "libs/wimgapi.au3"
    #include "libs/GUICtrlSetOnEventEx.au3"
    #include "libs/OwnTab.au3"
    #include "libs/GUICtrlPic.au3"
    ; ===============================================================================================================================

    [/autoit][autoit][/autoit][autoit]

    ; #Modules# =====================================================================================================================
    #include "modules/common.au3"
    #include "modules/metadata.au3"
    #include "modules/features.au3"
    ; ===============================================================================================================================

    [/autoit][autoit][/autoit][autoit]

    ; #ToDo# =====================================================================================================================
    ; Alle controls die relativ positioniert sind untereinander. Könnte Probleme mit definierten Variablen geben, das diese dann noch net definiert wurden
    ; =============================================================================================================================

    [/autoit][autoit][/autoit][autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit][autoit][/autoit][autoit]

    Const $BinaerMode = 0
    Const $TextMode = 1

    [/autoit][autoit][/autoit][autoit]

    Local $GUIName = "WIM MetaData Modifier - Batch", $ProgramName = "WIM Modifier", $ResultGUIName = "Imaging Operaion in Progress"
    Local $sWimFile, $srcInput, $hWim, $ImgCount, $ImgName, $aXML, $mdListItemCounter ; path to wim file ; Input control ; handle to wim ; count of wim images ; name of wim images ; metadata buffer ; counter of metadata list items

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    #Region - initialize APIs
    Local $initAPI = InitializeAPIs()
    If @error Then
    MsgBox(16, $ProgramName, "API report: " & @error)
    Exit
    EndIf
    #EndRegion - initialize APIs

    [/autoit][autoit][/autoit][autoit]

    CreateMainGUI($GUIName, $ProgramName, $srcInput, $hWim, $ImgCount, $ImgName, $aXML, $mdListItemCounter) ; create main GUI

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: CreateMainGUI
    ; Description ...: Creates the main GUI
    ; Syntax.........: CreateMainGUI(ByRef $GUIName, ByRef $ProgramName, ByRef $srcInput)
    ; Parameters ....: ByRef $GUIName - Reference to GUI name
    ; ByRef $ProgramName - Reference to porgram name
    ; ByRef $srcInput - Handle of wim source control
    ; Return values .:
    ; Author(s) .....: André Cut
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ;
    ; ===============================================================================================================================
    Func CreateMainGUI(ByRef $GUIName, ByRef $ProgramName, ByRef $srcInput, ByRef $hWim, ByRef $ImgCount, ByRef $ImgName, ByRef $aXML, ByRef $mdListItemCounter)
    Local $nWidth = 600, $nHeight = 550, $InputWidth = 384, $Pic = @ScriptDir & "\temp\arrow-down.png" ;down-arrow-icon.png"
    Local $CheckboxExOpt[4], $mdCheckBoxStatus[3]
    Local $AList = ObjCreate("System.Collections.ArrayList")

    [/autoit][autoit][/autoit][autoit]

    ; register WM_NOTIFY to activate sort function in update listview and support subtabs
    ;~ GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    [/autoit][autoit][/autoit][autoit]

    ; register WM_COMMAND to activate update wim image info label, if image input updown control has changed
    ;~ GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $mGUI = GUICreate($GUIName, $nWidth, $nHeight, (@DesktopWidth - $nWidth) / 2, (@DesktopHeight - $nHeight) / 2)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents") ; close gui
    $cGUI_Change = GUICreate("Child_Change", 300, 300, 250, 150, BitOR($WS_CHILD, $WS_TABSTOP), -1, $mGUI) ; width height $WS_EX_CLIENTEDGE
    GUISwitch($mGUI)
    $Tab = GUICtrlCreateTab(2, 2, -1, -1) ; params get changed later
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0) ; tab control style definition
    $dCoord = GetCtrlCoordinates($mGUI, $Tab)
    GUICtrlSetPos($Tab, $dCoord.Item("t_left"), $dCoord.Item("t_top"), $dCoord.Item("t_right"), $dCoord.Item("t_bottom"))
    $TabChange = GUICtrlCreateTabItem("Change")
    GUISwitch($cGUI_Change)
    WinMove($cGUI_Change, "", $dCoord.Item("t_left"), $dCoord.Item("TabPos_y") + $dCoord.Item("tt_top"), $dCoord.Item("t_right"), $dCoord.Item("t_bottom")-$dCoord.Item("tt_top"))
    $cTab_Change = GUICtrlCreateTab(0, 0, $dCoord.Item("t_right"), $dCoord.Item("t_bottom")-$dCoord.Item("tt_top"))
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0) ; tab control style definition
    $cTabChange_MetaData = GUICtrlCreateTabItem("MetaData")
    $dCoord = GetCtrlCoordinates($cGUI_Change, $cTab_Change)
    GUICtrlCreateGroup("WIM", $dCoord.Item("g1_left"), $dCoord.Item("g1_top"), $dCoord.Item("g1_width"), 350) ; create wim group control
    Opt("GUICoordMode", 0) ; relative position
    GUICtrlCreateGroup("Options", 0, 350 + $dCoord.Item("ctrl_s2"), $dCoord.Item("g1_width"), 80) ; create options group control
    $mChangeBtn = GUICtrlCreateButton("Change", $dCoord.Item("g1_width") - 76, 80 + $dCoord.Item("ctrl_s2"), 76, 25) ; create change metadata btn control
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateLabel("Source", $dCoord.Item("g2_left"), $dCoord.Item("g2_top")+4, 38, 18) ; create source label control
    $Selector = GUICtrlCreateButton(">", $dCoord.Item("g1_width") - $dCoord.Item("g2_left"), $dCoord.Item("g2_top"), 20, 22) ; create history archive btn
    Opt("GUICoordMode", 0) ; relative position
    $mdSrcBrowseBtn = GUICtrlCreateButton("Browse...", -82, 0, 80, 22) ; create browse-source control
    $srcInput = GUICtrlCreateInput("", -$InputWidth - $dCoord.Item("ctrl_s2"), 0, $InputWidth, 22) ; create wim-source input control
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateGroup("Images", $dCoord.Item("g2_left"), 120, 260, 136) ; create image group control
    Opt("GUICoordMode", 0) ; relative position
    $imgTreeView = GUICtrlCreateTreeView($dCoord.Item("g1_left"), $dCoord.Item("ctrl_s1"), 260 - $dCoord.Item("g1_left")*2, 136 - $dCoord.Item("g_bottom"), BitOR($TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES, $WS_GROUP, $WS_TABSTOP)) ; create image treeview control
    Opt("GUICoordMode", 1) ; absolute position
    Local $aPos = ControlGetPos($mGUI, "", $imgTreeView)
    $loadImages = _GUICtrlPic_Create($Pic, $aPos[0] + $aPos[2]-30, $aPos[1]-27, 32, 32, BitOR($SS_CENTERIMAGE, $SS_NOTIFY)) ;, $WS_EX_DLGMODALFRAME) ; create load wim images to treeview control btn
    GUICtrlCreateLabel("New Image Name", $dCoord.Item("g2_left"), 280, 86, 18) ; create new image name label control
    Opt("GUICoordMode", 0) ; relative position
    $nInput = GUICtrlCreateInput("Windows 7", 86 + $dCoord.Item("ctrl_s1"), -4, 178, 22) ; create new image name input control
    $nList = GUICtrlCreateList("", 178 + $dCoord.Item("ctrl_s1"), 0, 258, 98, $WS_TABSTOP, $LBS_NOTIFY) ; create image new name list control
    $DelListItemBtn = GUICtrlCreateButton("Delete", -$dCoord.Item("ctrl_s1") - 76, 35, 76, 25) ; create delete btn control
    $InsListItemBtn = GUICtrlCreateButton("Insert", -$dCoord.Item("ctrl_s2") - 76, 0, 76, 25) ; create insert new image name btn control
    GUICtrlSetState($InsListItemBtn, $GUI_FOCUS)
    Opt("GUICoordMode", 1) ; absolute position
    $exOptCheckbox = GUICtrlCreateCheckbox("Explicit Options", $dCoord.Item("g2_left"), 434, 90, 20) ; create explicit options checkbox control
    $exOptGroup_x = $dCoord.Item("g2_left") + 90 + $dCoord.Item("ctrl_s1") ; create explicit options group control
    GUICtrlCreateGroup("", $exOptGroup_x, 398 + $dCoord.Item("ctrl_s2"), 450, 80 - $dCoord.Item("ctrl_s2")*2)
    Opt("GUICoordMode", 0) ; relative position
    ; create explicit options checkbox controls
    $CheckboxExOpt[0] = GUICtrlCreateCheckbox("Name", $dCoord.Item("g2_x_s"), $dCoord.Item("g2_y_s"), 86, 18)
    $CheckboxExOpt[1] = GUICtrlCreateCheckbox("Description", 86 + $dCoord.Item("ctrl_s2"), 0, 80, 18)
    $CheckboxExOpt[3] = GUICtrlCreateCheckbox("Display Description", 0, 18, 110, 18)
    $CheckboxExOpt[2] = GUICtrlCreateCheckbox("Display Name", -86 - $dCoord.Item("ctrl_s2"), 0, 86, 18)
    #Region - params for assignment
    $AList.add($nInput)
    $AList.add($nList)
    $AList.add($CheckboxExOpt)
    $AList.add($imgTreeView)
    $AList.add($exOptCheckbox)
    #EndRegion - params for assignment
    #Region - user functions
    GUICtrlSetOnEventEx($mdSrcBrowseBtn, "WimBrowseFiles") ; browse for wim files
    GUICtrlSetOnEventEx($loadImages, "LoadImagesToTreeView", $imgTreeView) ; load wim images into treeview
    GUICtrlSetOnEventEx($InsListItemBtn, "InsertListItem", $AList, 1) ; insert name to list
    GUICtrlSetOnEventEx($DelListItemBtn, "DeleteListItem", $AList, 1) ; delete name from list
    GUICtrlSetOnEventEx($exOptCheckbox, "SetExplicitOptionsStatus", $AList, 1) ; activate/ deactivate options
    GUICtrlSetOnEventEx($mChangeBtn, "ChangeMetaData", $AList, 1)
    SetExplicitOptionsStatus($AList) ; disable ctrls on first start
    #EndRegion - user functions
    ; ===== Tab Features =====
    Opt("GUICoordMode", 1) ; absolute position
    $cTabChange_Features = GUICtrlCreateTabItem("Features")
    GUICtrlCreateGroup("WIM", $dCoord.Item("g1_left"), $dCoord.Item("g1_top"), $dCoord.Item("g1_width"), 92) ; create wim group control
    Opt("GUICoordMode", 0) ; relative position
    $fGroupHeight = $dCoord.Item("TabPos_height") - $dCoord.Item("g1_top") - (92 + $dCoord.Item("ctrl_s2")) - 25 - $dCoord.Item("ctrl_s2")*2
    GUICtrlCreateGroup("Features", 0, 92 + $dCoord.Item("ctrl_s2"), $dCoord.Item("g1_width"), $fGroupHeight)
    $fListViewHeight = $fGroupHeight - $dCoord.Item("g1_y_s")*2 - 25 - $dCoord.Item("ctrl_s2")
    $fListView = GUICtrlCreateListView("Feature|State|New State", $dCoord.Item("g2_left"), $dCoord.Item("g1_y_s"), $dCoord.Item("g1_width") - $dCoord.Item("g2_left")*2, $fListViewHeight, $LVS_REPORT, BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES))
    _GUICtrlListView_SetColumnWidth($fListView, 0, 260)
    $DisableFeatureBtn = GUICtrlCreateButton("Disable", $dCoord.Item("g1_width") - $dCoord.Item("g2_left")*2 - 76, $fListViewHeight + $dCoord.Item("ctrl_s2"), 76, 25) ; create disable feature btn control
    GUICtrlSetOnEvent($DisableFeatureBtn, "DisableFeature")
    $EnableFeatureBtn = GUICtrlCreateButton("Enable", -76 - $dCoord.Item("ctrl_s2"), 0, 76, 25) ; create enable feature btn control
    GUICtrlSetOnEvent($EnableFeatureBtn, "EnableFeature")
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateLabel("Source", $dCoord.Item("g2_left"), $dCoord.Item("g2_top"), 38, 18) ; create source label control
    Opt("GUICoordMode", 0) ; relative position
    $fSrcInput = GUICtrlCreateInput("", 38 + $dCoord.Item("ctrl_s1"), -4, $InputWidth, 22) ; create wim-source input control
    $fSrcBrowseBtn = GUICtrlCreateButton("Browse...", $InputWidth + $dCoord.Item("ctrl_s1"), 0, 80, 22) ; create browse-source control
    GUICtrlSetOnEventEx($fSrcBrowseBtn, "WimBrowseFiles") ; browse for wim files
    $fSelector = GUICtrlCreateButton(">", 82, 0, 20, 22) ; create history archive btn
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateLabel("Image", $dCoord.Item("g2_left"), 100, 38, 18) ; create image label control
    Opt("GUICoordMode", 0) ; relative position
    $fImgInput = GUICtrlCreateInput("", 38 + $dCoord.Item("ctrl_s1"), -4, 38, 22)
    $fImgUpDown = GUICtrlCreateUpdown($fImgInput, BitOR($UDS_WRAP, $UDS_NOTHOUSANDS)) ; combines updown and input control
    GUICtrlSetLimit($fImgUpDown, $ImgCount, 1)
    $fWimImageInfo = GUICtrlCreateLabel("", 38 + $dCoord.Item("ctrl_s1"), 4, 210, 18) ; create wim image info label control
    Opt("GUICoordMode", 1) ; absolute position
    $fChangeBtn = GUICtrlCreateButton("Change", $dCoord.Item("g1_left") + $dCoord.Item("g1_width") - 76, $dCoord.Item("g1_top") + 92 + $dCoord.Item("ctrl_s2") + $fGroupHeight + $dCoord.Item("ctrl_s2"), 76, 25)
    GUICtrlSetOnEvent($fChangeBtn, "SetFeatures")
    GUICtrlSetOnEvent($fChangeBtn, "ResultGUI1")


    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW, $cGUI_Change) ; show parent gui
    GUISwitch($mGUI)
    $TabIntegrate = GUICtrlCreateTabItem("Integrate")
    $TabMount = GUICtrlCreateTabItem("Mount")
    GUICtrlCreateTabItem("") ; end tabitem $hTab definition
    GUISetState(@SW_SHOW) ; show parent gui
    EndFunc
    ...

    [/autoit]

    Ich finds halt blöd ständig den CoordMode zu ändern, aber nur absolut zu arbeiten ist auch blöd, da man viel rechnen muss und nachdenken, bin halt sehr penibel.
    Das coole ist, die meisten Prozesse sind schon implementiert, das Layout hält mich auf trab und zwingt mich dazu es ständig zu überdenken...

    Einmal editiert, zuletzt von Trolleule1337 (29. Juni 2013 um 21:08)

  • Oh man muss viel rechnen und nachdenken. Ist halt nix umsonst im Leben. Rechnen haste doch gelernt in der Schule, also was soll daran so schlimm sein. Man kann halt nicht dumm ein Programm schreiben. Außerdem sollte man sich das Layout schon vorher überlegen. Du weißt doch was du machen wikllst und was du brauchst. Wen man ein Programm schreibt, macht man vorher ein Layout und evtl. eine Mindmap, damit man weiß was alle reinkommt. Du musst doch nur am Anfang die GUI erstellen, wozu willst du da soviel rechnen. Die Pixelangaben muss du doch nur einmal ausrechnen und dann stehen die fest. Es sei denn, du willst zur Laufzeit die Controls verändern, aber da kannst du ja ggf. Formeln für nehmen. Die rechnen dann für dich ;)
    Vom Screenshot her, würde ich sagen, du brauchst dafür nicht mehr als 1500 Zeilen.

    Und warum schaltest du so oft den CoordMode um?

    Weißt du eigentlich wann man ByRef verwendet??

  • Bin leider ein perfektionist, daher die genauigkeit, aber ich habe aktuell eine coole Lösung gefunden und zwar mit CoordMode 2 kann man paar nützliche Sachen anstellen.
    Klar weiß ich wann man ByRef benutzt, sonst würde ich es nicht machen :D

    Wie du siehst verwende ich keine globale Variable...

  • Wenn du relative Koordinaten nutzen willst kannst du auch eine Funktion zur Ctrlerstellung definieren die intern die letzte Position speichert.
    (Nur ein Beispiel, das wird so wenig bringen)

    [autoit]

    Func _GUICtrlCreateButton($sText, $iX, $iY, $iW, $iH, $iStyle = -1, $iExStyle = 0)
    Local Static $xAbs = 0, $yAbs = 0
    $xAbs += $iX
    $yAbs += $iY
    Return GUICtrlCreateButton($sText, $xAbs, $yAbs, $iW, $iH, $iStyle, $iExStyle)
    EndFunc

    [/autoit]

    Damit könntest du jedes Mal relative Koordinaten zum letzten Button angeben. Diese Funktion lässt sich natürlich auf beliebige Ctrls erweitern.

  • Ich bin auch ein Perfektionist. Aber was hat das ganze mit Perfektion zutun?
    Warum nicht die Pixels absolut angeben? Vielleicht gibts dafür einen wichtigen Grund, dann kann ich das in meinen Scripten auch machen.

    Erklär mir mal bei jeden Parameter warum du dann ByRef verwendet hast.

    Hier siehst du das Local außerhalb von Funktionen Global sind.

    [autoit]

    Local $sText1 = "Test1"
    Global $sText2 = "Test2"

    [/autoit][autoit][/autoit][autoit]

    _Test()

    [/autoit][autoit][/autoit][autoit]

    Func _Test()
    MsgBox(0, "", "$sText1: " & $sText1 & @CRLF & "$sText2: " & $sText2)
    EndFunc

    [/autoit]
  • Hi,
    ehrlich gesagt, wirklich nachvollziehen kann ich das "Problem" nicht!
    Wenn ich eine bestimmte Funktion in einer Programmiersprache brauche die "nativ" nicht zur Verfügung steht, na dann schreib ich mir halt eine...
    DAS verstehe ich unter einer "perfekten" Umsetzung eines Problems in ein Programm!
    Aus irgendwelchen nicht zu meinem Problem passenden Funktionen die rauszusuchen, die am ähnlichsten ist und dann irgendwelche programmiertechnischen Klimmzüge zu machen ist alles andere als ein Ausdruck von "Perfektion"!

  • Ich hab auch kein Problem!
    Das mit dem Lokal im Globalen Bereich ist ja mal interessant, wusste ich nicht, bin wohl doch nicht so toll wie ich dachte :D

    Der Flash mit dem ByRef kam durch den Beitrag von BugFix: https://autoit.de/index.php?page=Thread&amp;postID=203773

    Jetzt merke ich erst, das

    [autoit]

    ;===============================================================================
    ; EDIT: Punkt 1 gestrichen, wie die Diskussion ergeben hat, war dies schlicht unsinnig.
    ;===============================================================================

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;============== 2. Vermeidung Globaler Variablen
    #cs
    Warum soll ich überhaupt Globale Variablen verwenden? Hier wird meist die Antwort kommen:
    'Damit ich den Inhalt in verschiedenen Funktionen nutzen/verändern kann.'
    Aber das läßt sich auch anders lösen:
    #ce

    [/autoit][autoit][/autoit][autoit]

    Local $myVar = 0

    [/autoit][autoit][/autoit][autoit]

    _PlusEins($myVar)
    ConsoleWrite('$myVar: ' & $myVar & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    ; im Funktionskopf muß nicht der identische Variablenname stehen, erleichtert aber das Lesen
    ; die Variable wird der Funktion 'ByRef' übergeben ==> sie kann somit von der Funktion verändert werden
    ; ohne 'ByRef' erfolgt die Übergabe immer 'ByVar', d.h. eine Kopie der Quellvariable wird erzeugt
    Func _PlusEins(ByRef $myVar)
    $myVar += 1 ; kein Return erforderlich, da die Variable in ihrer Quelle geändert wird
    EndFunc

    [/autoit]

    das gleiche ist, wie (vllt. nicht das gleiche, aber den selben output liefert)

    [autoit]

    ;===============================================================================
    ; EDIT: Punkt 1 gestrichen, wie die Diskussion ergeben hat, war dies schlicht unsinnig.
    ;===============================================================================

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;============== 2. Vermeidung Globaler Variablen
    #cs
    Warum soll ich überhaupt Globale Variablen verwenden? Hier wird meist die Antwort kommen:
    'Damit ich den Inhalt in verschiedenen Funktionen nutzen/verändern kann.'
    Aber das läßt sich auch anders lösen:
    #ce

    [/autoit][autoit][/autoit][autoit]

    Local $myVar = 0

    [/autoit][autoit][/autoit][autoit]

    _PlusEins()
    ConsoleWrite('$myVar: ' & $myVar & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    ; im Funktionskopf muß nicht der identische Variablenname stehen, erleichtert aber das Lesen
    ; die Variable wird der Funktion 'ByRef' übergeben ==> sie kann somit von der Funktion verändert werden
    ; ohne 'ByRef' erfolgt die Übergabe immer 'ByVar', d.h. eine Kopie der Quellvariable wird erzeugt
    Func _PlusEins()
    $myVar += 1 ; kein Return erforderlich, da die Variable in ihrer Quelle geändert wird
    EndFunc

    [/autoit]

    Kann mir jemand erklären was das Beispiel von BugFix soll????? Denn wenn ich das mit ByRef jetzt richtig verstanden habe, macht das nur bei einer Paramterübergabe zwischen zwei Funktionen Sinn...

    Andy: Aus irgendwelchen nicht zu meinem Problem passenden Funktionen die rauszusuchen, die am ähnlichsten ist und dann irgendwelche programmiertechnischen Klimmzüge zu machen ist alles andere als ein Ausdruck von "Perfektion"!

    Was meinst du damit?


    Danke

    2 Mal editiert, zuletzt von Trolleule1337 (1. Juli 2013 um 14:28)

  • Kann mir jemand erklären was das Beispiel von BugFix soll????? Denn wenn ich das mit ByRef jetzt richtig verstanden habe, macht das nur bei einer Paramterübergabe zwischen zwei Funktionen Sinn...

    Das Beispiel kannte ich noch nicht. Gefällt mir aber, wenn man auf diese Art lokale Variablen in mehreren Funktionen benutzen kann.

    ByRef kannte ich bisher nur so, daß man es benutzt, wenn eine Variable eine besonders große Datenmengen enthält, und dann nicht der gesammte Inhalt in eine neue Variable kopiert werden muß, was bei einer "normalen" Parameterübergabe geschieht.
    Zitat aus der Hilfe:
    [...] ByRef ist zu bevorzugen wenn eine Funktion große Mengen an Daten beinhaltet wie zum Beispiel ein großen Array. [...]

    Andy: Aus irgendwelchen nicht zu meinem Problem passenden Funktionen die rauszusuchen, die am ähnlichsten ist und dann irgendwelche programmiertechnischen Klimmzüge zu machen ist alles andere als ein Ausdruck von "Perfektion"!

    Was meinst du damit?


    Danke

    Also ich habe das so verstanden:
    Wenn eine Funktion nicht existiert, dann schreibe ich mir selbst eine, und fange nicht an, umständlich vorhandene Funktionen "umzubiegen"...
    ...und dem kann ich nur 100% zustimmen :thumbup: