Hallo, weiß jemand wie man eine Spalte von einem Listview färben kann ohne gleich das ganze Listview zu färben?
Vielen Dank im Voraus
RapIT
Beiträge von RapIt
-
-
Das Problem ist, dass FileOpen() nicht die Datei mit einem Editor öffnet, dafür musst du schon Shellexecute() benutzen, wie PrideRage bereits sagte. File Open öffnet die Datei im Hintergrund damit du sie dann z.B mit FileWrite bearbeiten kannst, ohne sie dabei in einem Editor zu sehen.
-
Aber mal ganz davon abgesehen was reichen würde ;-das sit ja ein kleines Beispiel, ganz anders als das richtige- was ist denn falsch, bzw. das Problem?
Im Anhang das was ich bis jetzt habe.
-
Hier, ich habe etwas kleines gebastelt:
Eigentlich sollte sich nur das Brett aktualisieren, aber die Labels tun das auch...Oder ist das vielleicht nur ein Darstellungsfehler!??
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#Include <WinAPI.au3>$Form = GUICreate("Mühle",@DesktopWidth+10, @DesktopHeight+30,-10,-30)
GUISetBkColor(0x000000)
GUICtrlCreatePic(@scriptdir&"\"&"brett.jpg",(@DesktopWidth-800)/2,150,800,800)
$1 = GUICtrlCreateLabel("Player 1", 50, 30, 200, 60,0x01)
GUICtrlSetColor($1,0xff0000)
GUICtrlSetFont($1,30)
$2 = GUICtrlCreateLabel("Player 2", @DesktopWidth-230, 30, 200, 60,0x01)
GUICtrlSetFont($2,30)
GUICtrlSetColor($2,0x0000FF)
Global Const $RECT = "int Left;int Top;int Right;int Bottom"
GUISetState(@SW_SHOW)
Global $struct = DllStructCreate($RECT)
DllStructSetData($struct,"Left" ,(@DesktopWidth-800)/2)
DllStructSetData($struct,"Top", 150)
DllStructSetData($struct,"Right",((@DesktopWidth-800)/2)+800)
DllStructSetData($struct,"Bottom",900)
Global $Pointer = DllStructGetPtr($struct)While 1
sleep(2000)
_WinAPI_RedrawWindow($form,$Pointer)
WEnd -
Also ich habe das jetzt so verstanden, dass ich eine Pointer erstellen muss, der auf die Struktur verweist, in der sich die vier Koordinaten befinden. Dann kann ich den Pointer in _WinAPI_RedrawWindow() einbinden. (Er ist ja dann nur eine Variable) und dieser verweist dann auf die 4 Punkte. Den Pointer erstelle ich mit DllStructGetPtr($struct).
Also sähe das dann ca so aus:-------------------------------------------------------------------------------------
Global Const $RECT = "int Left;int Top;int Right;int Bottom"
Global $struct = DllStructCreate($RECT)DllStructSetData($struct,"Left" ,150)
DllStructSetData($struct,"Top", 150)
DllStructSetData($struct,"Right",900)
DllStructSetData($struct,"Bottom",900)Global $Pointer = DllStructGetPtr($struct)
_WinAPI_RedrawWindow($form,$Pointer)
-------------------------------------------------------------------------------------------
Habe ich etwas falsch verstanden? Ich habe es nämich genau so und trotzdem wird das ganze Fenster aktualisiert.
edit: Komischerweise habe ich den Thread nicht gesehen und Quellcode nicht gesehen, obwohl er schon dagewesen sein müsste
-
Ah, vielen Dank.
Sähe das dann z.B so aus: _WinAPI_RedrawWindow($form, 0, 0,$struct) . Weil hier darf ja nur ein Wert rein, da bringt es mir ja nichts mit DllStructGetData($struct,"Right") einen Wert der Struktur auszulesen... Oder muss die Zeile _WinAPI_RedrawWindow($form, 0, 0,$RECT) aussehen. Es funktioniert i-wie beides nicht, die Funktion wird dann einfach übersprungen, obwohl das eig. sehr richtig aussieht, wie ihr das geschrieben habt.
-
Wie funktioniert denn die "$tagRECT Struktur" Wie kann ich die Koordinaten in dem Parameter angeben?
-
das ist etwas schwierig ihc kanns besse rbeschreiben. Es soll ein Mühlespiel sein. Wenn man mit der Maus über eine mögliche Ablageposition hovert, wird ein Kreis angezeigt, aber er geht wieder weg wenn man mit der Maus wieder weggeht ohne zu drücken. Dieses "weggehen" ist das _WinAPI_RedrawWindow() und das passiert halt alle paar Sec wobei das ganze Spiel dann immer aktualisiert.
-
Hallo zusammen,
ich muss mit _WinAPI_RedrawWindow() öfters eine Graphic aktualisieren. Dies nervt aber beim hingucken ziemlich, da es alle paar sec. passiert. Gibt es eine Möglichkeit dies weniger auffällig zu gestalten und wie genau funktioniert es, nur ein Teil des Bildschirms zu aktualisieren?
Vielen Dank im Voraus
RapIT -
Aber im Programm verwendest du doch dies _GDIPlus_GraphicsClear($hGraphicsBuffer, 0xFFFFFFFF) und das kann ich bei mir ja nicht, weil dann auch die gui dahinter kaputt geht... Aber ich glaube ich weiß wie ich es machen muss...
-
thx, auf die Idee bin ich auch vor 10 sec gekommen^^
-
Ja, das ist ja auch so aber immer wenn man mit dem curser wieder weggeht, löscht der halt die Grafiken wieder. Ich add dich mal...
-
Hallo zusammen:
Ich habe mir vorgenommen ein Mühle-Spiel zu proggen... Die Idee ist, dass man, wenn man über eine mögliche Ablageposition hovert ein Stein dort erscheint und wieder weggeht, sobald man die maus wieder wegbegt. Sobald man aber klickt soll der Stein dort fest installiert bleiben und sich die Farbe wechseln. An diesm Punkt haperts noch etwas.
Das Problem ist das das Fenster mit _WinAPI_RedrawWindow() das Fenster aktualisiert sobaldman mit der Maus wieder weghovert.(Ich habe keine Möglichkeit gefunden ein einzelnes GDI+ Objekt zu löschen, ohne dabei die ganze Graphic zu löschen.) Das Problem ist halt, dass alles so funktionieren soll nachdem ein Stein "fest installiert" ist. Hierbei aktualisiert er aber auch immer und daher geht der Stein den man gelegt hat immer wieder weg.
Mein Ansatz war anstatt von_WinAPI_RedrawWindow() einfach nach jedem Ablegen eines Steins eine neue GDI+ Graphic zu erstellen und die alte mittels _GDIPlus_GraphicsClear Transparent zu machen, sobald man weghovert. Sobald ein Stein gelegt wurde, wird die Grafik dann einfach nicht transparent gemacht. Hierbei wird aber komischerweise wieder der ganze Bildschirm schwarz anstatt die Grafik transparent und die Gui weiterhin sichtbar
Ich hoffe jemand versteht überhaupt das Problem^^
Vielen Dank im Voraus.
RapIT -
Ah, schade, naja, dann werd ich mir wohl was anderes einfallen lassen müssen...
-
Ja, aber ob ich jetzt das Bild neu zeichne oder die Graphic aktualisiere macht jetzt auch keinen großen unterschied..
-
Ne, das geht nicht weil der Hintergrund ein Bild ist...
-
Hallo nochmal,
Gibt es eine Möglichkeit nur ein einzelnes GDI+ Objekt (z.B eine Ellipse) zu löschen ohne direkt die ganze Graphic zu löschen oder _WinAPI_RedrawWindow($gui) zu machen? Sonst aktualisiert der bei mir nämlich alle 100 ms das Fenster...
Viele Grüße,
RapIT -
Dachte ich auch zuerst, aber ich dachte, dass ist eh das selbe^^ Aber so gehts, Vielen Dank
-
Nein, das kann ja nicht gehen, weil man nur RGB farben benutzen kann... und nicht transparenz... Dazu gibts ja das Attribut $GUI_BKCOLOR_TRANSPARENT
-
Einfach nur ein Label