GUI- ähnliches Raster wie bei Koda ?

01/13/2010 15:12 .nAno#1
Hi, ich wollte mal fragen ob es einen GUI befehl gibt mit dem man ein ähnliches Raster wie bei Koda erzeugen kann ;)

Falls es sowas gibt (oder etwas in der Art) geh ich auch mal davon aus, dass es eine Möglichkeit gibt die Positionen von Elementen die hinzugefügt wurden von einer Funktion bestimmen zu lassen...

Ich bin mir nicht ganz sicher ob ich da mit GUICtrlCreateGraphic richtig liege...

Freu mich auf jedenfall über nützliche Beiträge, so far nAno ;)
01/13/2010 18:03 Xereon#2
Quote:
Originally Posted by .nAno View Post
Hi, ich wollte mal fragen ob es einen GUI befehl gibt mit dem man ein ähnliches Raster wie bei Koda erzeugen kann ;)

Falls es sowas gibt (oder etwas in der Art) geh ich auch mal davon aus, dass es eine Möglichkeit gibt die Positionen von Elementen die hinzugefügt wurden von einer Funktion bestimmen zu lassen...

Ich bin mir nicht ganz sicher ob ich da mit GUICtrlCreateGraphic richtig liege...

Freu mich auf jedenfall über nützliche Beiträge, so far nAno ;)
Wenn du den Grid nur graphisch haben willst, dann GuiCtrlCreateGraphic in den Hintergrund legen, aber nicht vergessen, dass Control zu disablen, sonst klaut er dir noch die ganzen Messages :P
01/13/2010 18:17 HardCore.1337#3
Wenn ich dich richtig verstanden hab, willst du auf deinem Formular ein Raster haben (also zu Laufzeiten).?

Mh, mit Koda kannst du sowas nicht machen. Entweder du machst es wie von Xereon beschrieben oder ich mach dir mal eine DLL.
01/13/2010 19:16 kknb#4
ich würde es mit GDIPlus.au3 zeichnen.

Code:
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('MustDeclareVars', 1)
	global $hGUI, $hWnd, $hGraphic, $hPen
	$hGUI = GUICreate("GDI+", 400, 300)
	$hWnd = WinGetHandle("GDI+")
	GUISetState()

_Main()

Func _Main()
	; Draw line
	_GDIPlus_Startup ()
	$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
	$hPen = _GDIPlus_PenCreate ()
	local $x=1
	local $y=5
	for $i = 1 to 90
		_GDIPlus_GraphicsDrawLine ($hGraphic, $x,5, $x,295, $hPen)
		_GDIPlus_GraphicsDrawLine ($hGraphic, 1,$y, 395,$y, $hPen)
		$y+=5
		$x+=5
	Next
	Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main
könnte dann so aussehen wenn ich das richtig verstanden habe.

[Only registered and activated users can see links. Click Here To Register...]
01/13/2010 19:56 .nAno#5
Also, das Projekt ist nen CSS Creator der das lästige Positioning übernimmt^^ (glaubt mir, das Abschätzen von den Positionen in Pixel ist ziemlich lästig xD)

Das Raster ist eig. dazu gedacht das man als User die späteren Positionen der Elemente besser auswählen kann..
Die ausgelesenen Koordinaten werden dann auf den gesamten Bildschirm hochgerechnet und fertig ist die Position ;)

Also brauch ich etwas das die oben benötigten Möglichkeiten bietet :P
01/13/2010 23:49 kknb#6
ist denn die größe (auflösung) des gesammten bildschirms bekannt bzw immer gleich? denn ich glaube das wird nicht so leicht sowas dynamisch zu gestalten. falls die auflösung immer gleich ist brauchst du ja nur die koordinaten der elemente auslesen und dann auf die auflösung hochrechnen. aber falls nicht wird es sehr schwierig sein es zum beispiel auf widescreen monitore anzupassen.
01/14/2010 15:13 .nAno#7
Die erste Version (also das Grundgerüst) soll auf die absolut-Einstellung abgestimmt sein, heisst:

Die Pixelabstände von den jeweiligen Rändern der Side werden nicht von der größe des Browserfensters beeinflusst ;)

Es gibt allerdings auch noch ne relative einstellung, welche dann (logischerweise) vom Browserfenster beeinflusst wird^^

Das Fenster soll ne feste Größe vorgeschrieben bekommen, damit die Multiplikationswerte auch immer zutreffend auf den echten Screen sind...

Somit wäre ne gewisse Dynamik anfangs ausgeschlossen ;)

Edit: sry hab jetzt erst nach nem Moment an der frischen Luft verstanden wie du das mit "dynamisch" meintest

Ja, der benutzer soll Rechtecke (als Symbol für das später hinzugefügte Element) von einer vordefinierten Größe in dem Raster (oder auch einfach weißem Feld) auf irg. eine Art bewegen können, seis durch einen Externen Dummy oder einfach durch das Ziehen mit der Maus...

Dann soll ein Punkt (zB. die Ecke links, oben) Diese Koordinate in dem Feld soll dann ausgelesen werden (und auf den gesamten Screen hochgrechnet werden) ;)
01/14/2010 21:47 kknb#8
joa ist recht einfach, hatte dazu mal was im inet gefunden.
Code:
#include <StaticConstants.au3>
#include <ListviewConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SliderConstants.au3>
#Include <GuiListView.au3>
#Include <Array.au3>
#Include <File.au3>
#Include <Misc.au3>

Opt("GUIOnEventMode", 1)


$hGUI = GUICreate("Transparent", 575, 510)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Ex")
$insert = GuiCtrlCreateButton("Insert Pic" ,10,10)
GuiCtrlSetOnEvent(-1, "_insert")
$Pic=GUICtrlCreatePic("", 50, 50)
GuiCtrlSetOnEvent(-1, "_DragMe")
$hsplitter1 = GUICtrlCreateLabel("",270, 125, 8, 205,-1,$SS_BLACKFRAME)

GUICtrlSetOnEvent($hsplitter1,"_DragMe")
    $hlabel = GUICtrlCreateLabel("Verschieb mich",20,120,100,25)
GUICtrlSetOnEvent($hlabel,"_DragMe")

GUISetState(@SW_SHOW)

While 1
    sleep(100)
WEnd

Func _insert()
    GuiCtrlDelete($pic)
    $bild = FileOpenDialog("Wählen Sie eine Datei aus!", @WindowsDir & "\", "Bilder (*.jpg;*.bmp)", 1 + 4 )
    $Pic = GUICtrlCreatePic($bild, 150, 150)
    GuiCtrlSetOnEvent(-1, "_DragMe")
EndFunc

Func _DragMe() ;Orginal zum verschieben von 1 Bild von ChaosKeks
    Local $Pos_C, $Pos_M, $Pos_M2, $Opt_old
    Local $dll = DllOpen("user32.dll")
    $Opt_old = Opt('MouseCoordMode', 0)
    $Pos_C = ControlGetPos($hGui, "", @GUI_CtrlId);$pic)
    $Pos_M = MouseGetPos()
    $Pos_W = WinGetPos($hGui)
    $x_Offset = $Pos_M[0] - $Pos_C[0]
    $y_Offset = $Pos_M[1] - $Pos_C[1]
    _MouseTrap($Pos_W[0]+$x_Offset,$Pos_W[1]+$y_Offset,$Pos_W[0]+$Pos_W[2],$Pos_W[1]+$Pos_W[3])
    While _IsPressed('01', $dll)
        $Pos_M = MouseGetPos()
        If $Pos_M <> $Pos_M2 Then
            GUICtrlSetPos(@GUI_CtrlId,$Pos_M[0] - $x_Offset, $Pos_M[1] - $y_Offset)
            sleep(10)
        EndIf
        $Pos_M = $Pos_M2
        sleep(50)
    WEnd
    DllClose($dll)
    Opt('MouseCoordMode', $Opt_old)
    _MouseTrap()
EndFunc

Func _Ex()
    Exit
EndFUnc
wenn alle deine controls soweit gesetzt sind kannst du die positionen mit controlgetpos auslesen und hochrechnen.
01/14/2010 22:22 .nAno#9
ok thx^^ ich werd warscheinlich die Funktion verfeinern indem ich mehrer Bilder einfügen kann (falls das ohen Multithreating geht), aber genau das meinte ich xD
01/16/2010 16:50 .nAno#10
Da ich jetz keine weitern Thread zu diesem Thema eröffnen möchte erlaub ich mir einfach mal nen Doppelpost :P

Also, das Programm funktioniert einwandfrei, nur in der GUI gibt es nen kleinen BUG :-/

Wenn man das Bild verrückt verschwimmen Teile des Rasters...

Ich habs jetz mit Sunken im Hintergrund verschwinden lassen, jetz ist die Frage wie ich diese Problem vermeiden kann :-/

Ich werd sobald ich wieder an meinem festen PC bin das Programm uploaden damit man sich nen genaueres Bild davon machen kann^^

Freu mich wie zuvor über Hilfe ;)