viele viele labels gehen nicht :)

  • So ich poste mal das bisherige skript. ich habe noch nicht weitergemacht weil ich denke mal ich müsste es anders angehen weil hier stellt sich schon das erste problem: Es werden nicht alle labels erstellt + es laggt beim verschieben des fensters

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Attr Editor", 625, 443, 192, 124)

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

    Global $Label[257][257]
    $startread = 0x000006
    $color = 0x000000
    $j = 0
    $y = 20

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

    Do
    $x = 20
    for $i = 0 to 256
    GUICtrlCreateLabel("", $x, $y, 1, 1)
    GUICtrlSetBkColor(-1,$color)
    $x = $x+1
    Next
    $y = $y+1
    $j = $j+1
    Until $j = 256

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    das programm sollte später eine datei laden, welches hex codes enthält und ausgelesen werden die dann dem gesetzten label der pos die ausgelesen wurde eine bestimmte farbe gibt. Dannach kann man die farbe ändern (ist eig kein problem wenn ich jedes label setzen könnte...) und anschließend gespeichert werden. label farbe auslesen und dann die bestimmten hexwerte in die datei setzen....

    naja gibts da irgwelche alternativen für die labels?

    Einmal editiert, zuletzt von LordKill94 (26. Juni 2010 um 15:49)

  • Ich würde dazu GDIPlus benützen.

    Ich habe zwar noch net ganz verstanden was du möchtest aber vll hilft dir dieses Script weiter:

    Spoiler anzeigen
    [autoit]


    #include<GDIplus.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    _GDIPlus_Startup()
    $hGUI = GUICreate("Attr Editor", 625, 443, 192, 124)
    $hGrafik = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(258,258,$hGrafik)
    $Context = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $hBrush =_GDIPlus_BrushCreateSolid(0xFF000000)
    $hBrushWeis =_GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    _GDIPlus_GraphicsFillRect($Context,0,0,625,443,$hBrush)
    GUIRegisterMsg($WM_PAINT, "Zeichne_das_Fenster_voll")
    GUISetState(1,$hGUI)
    While 1
    If _IsPressed(1) Then
    $MPos = MouseGetPos()
    $WPos = WinGetPos($hGUI)
    $MPos[0] -= $WPos[0] + 23
    $MPos[1] -= $WPos[1] + 40
    _GDIPlus_GraphicsFillRect($Context,$MPos[0],$MPos[1],1,1,$hBrushWeis)
    _GDIPlus_GraphicsDrawImage($hGrafik,$hBitmap,20,20)
    EndIf
    WEnd

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

    Func Zeichne_das_Fenster_voll()
    _GDIPlus_GraphicsDrawImage($hGrafik,$hBitmap,20,20)
    EndFunc

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

    Func _GDIPlus_GetPixel($hBitmap,$X,$Y)
    ; Prog@ndy
    Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $X, "int", $Y, "dword*", 0)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0],1,$result[4])
    EndFunc

    [/autoit]

    Wenn du eine Pixelfarbe ändern möchtest musst du nur:

    [autoit]


    $hBrush =_GDIPlus_BrushCreateSolid(0xFFFFFFFF);0xFF ist die Tranzperenz alles danach ist die Farbe
    _GDIPlus_GraphicsFillRect($Context,$MPos[0],$MPos[1],1,1,$hBrush)
    _GDIPlus_BrushDispose($hBrush); damit gibst du Ressorsen wieder frei wenn sich nicht mehr gebraucht werden, in diesem fall die Farbe

    [/autoit]


    Wenn du eine Pixelfarbe herausfinden willst musst du die funktion _GDIPlus_GetPixel() nehmen (ich glaube die kommt irgentwo aus dem Englischem Forum, weis es aber net mehr genau)

    [autoit]


    Func _GDIPlus_GetPixel($hBitmap,$X,$Y)
    Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $X, "int", $Y, "dword*", 0)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0],1,$result[4])
    EndFunc

    [/autoit]

    Vll hilft es ja

  • Ich würde beim drüberschauen mal sagen, dass du bei zeile 20

    [autoit]

    $y = $y + 15 oder zumindest + 5

    [/autoit]

    schreiben solltest. ansonsten legt er alles auf (fast) einen haufen.

  • Hallo LordKill94,

    dein Vorhaben ist in dieser Größe (257*257) nicht durchführbar, denn

    Zitat von Hilfe zu AutoIt3 Standardbegrenzungen

    GUI_MAXCONTROLS 65532 Maximale Anzahl von Controls in einem GUI-Fenster

    mfg (Auto)Bert