Sollte auch sonst der Allgemeinheit erhalten bleiben => CodeArchiv ?
Magnetrand?!
@André
Gern kannst du das ins CodeArchiv stellen doch ist es da besser wenn ich den Code soweit umbaue das man nicht die ICON´s aus dem zip braucht sondern ich einfach welche aus der shell32 nehme da der code ja sonst nich per copy and past angeschaut werden kann.
Sag mir einfach bescheid ob ich den code soweit abändern soll und du ihn dann rein stellen willst.
Danke dor schon mal.
[Edit] Und ein paar mehr komentare würde ich dann auch rein schreiben das man auch weis wo was passiert [/Edit]
Gern kannst du das ins CodeArchiv stellen doch ist es da besser wenn ich den Code soweit umbaue das man nicht die ICON´s aus dem zip braucht sondern ich einfach welche aus der shell32 nehme da der code ja sonst nich per copy and past angeschaut werden kann.
Sag mir einfach bescheid ob ich den code soweit abändern soll und du ihn dann rein stellen willst.
Danke dor schon mal.
[Edit] Und ein paar mehr komentare würde ich dann auch rein schreiben das man auch weis wo was passiert [/Edit]
Nachdem freedimension wieder mal den Magnetrand des Bildschirms erwähnt hat, musste ich diesen ALTEN Thread ausgraben.
Damals konnte mir nicht richtig geholfen werden, ich habe gestern versucht das problem selbst zu lösen, nach 3 stündigen graben in der MS SDK, habe ich es fürs erste aufgegeben. Bin noch nicht so fit in der API Programmierung.
Ich hoffe das mir jetzt irgendjemand helfen kann. Ich versuch es heute nochmal auf ein neues ....
Danke
MFG Lukaso
Damals konnte mir nicht richtig geholfen werden, ich habe gestern versucht das problem selbst zu lösen, nach 3 stündigen graben in der MS SDK, habe ich es fürs erste aufgegeben. Bin noch nicht so fit in der API Programmierung.
Ich hoffe das mir jetzt irgendjemand helfen kann. Ich versuch es heute nochmal auf ein neues ....
Danke
MFG Lukaso
Zuletzt geändert von Lukaso am 08.03.2005 20:34, insgesamt 1-mal geändert.
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
In guter alter Tradition gebe ich (obwohl ich dir ein komplettes Beispiel liefern könnte) nur ein paar "Schubser" in die richtige Richtung. Denken muss ein Programmierer schon selber, macht dafür aber auch mehr Spass 
1. Es gibt noch weitere Messages welche nicht in PB selber definiert sind, so z.B. #WM_SIZING und #WM_MOVING. Diese kannst du in einem WindowCallback abfragen. Dabei wird dir eine RECT-Struktur mit den Koordinaten des Fensters übergeben, welche du verändern kannst um die neue Position des Fensters festzulegen. Das geht während des gesamten Ziehvorgangs.
2. Unter Windows können Fenster in zwei einstellbaren Modus (ja, das ist tatsächlich der Plural
) verschoben werden. "Fensterinhalt bei ziehen anzeigen" und eben nicht. Leider verhält sich das oben Beschriebene in beiden Modus anders. Hierdrauf musst du also unterschiedlich reagieren. Abfragen kannst du diesen Modus über SystemParametersInfo_(#SPI_GETDRAGFULLWINDOWS,0,@Drag,0)
3. Alles weitere ist Mathematik, hier ein bisserl Vergleichen, dort etwas abziehen usw.
1. Es gibt noch weitere Messages welche nicht in PB selber definiert sind, so z.B. #WM_SIZING und #WM_MOVING. Diese kannst du in einem WindowCallback abfragen. Dabei wird dir eine RECT-Struktur mit den Koordinaten des Fensters übergeben, welche du verändern kannst um die neue Position des Fensters festzulegen. Das geht während des gesamten Ziehvorgangs.
2. Unter Windows können Fenster in zwei einstellbaren Modus (ja, das ist tatsächlich der Plural
3. Alles weitere ist Mathematik, hier ein bisserl Vergleichen, dort etwas abziehen usw.
@freedimension
Danke für deine Hilfe, habe es jetzt fass geschafft.
Ich brauche jetzt nur noch ne möglichkeit den Rahmen beim Ziehen abzuschalten, so dass er nicht mehr angezeigt wird.
Oder ne möglichkeit den Rahmen zu beeinflussen. Das erstgenannte würde ich bevorzugen. Habe jetzt im PSDK gesucht, finde aber keinen anhaltspunkt wie ich den Rahmen abschalten kann.
Ansonsten
MFG Lukaso
Danke für deine Hilfe, habe es jetzt fass geschafft.
Ich brauche jetzt nur noch ne möglichkeit den Rahmen beim Ziehen abzuschalten, so dass er nicht mehr angezeigt wird.
Oder ne möglichkeit den Rahmen zu beeinflussen. Das erstgenannte würde ich bevorzugen. Habe jetzt im PSDK gesucht, finde aber keinen anhaltspunkt wie ich den Rahmen abschalten kann.
Ansonsten
MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Da muß ich jetzt mal nachfragen was sich da anders verhaltenfreedimension hat geschrieben:2. Unter Windows können Fenster in zwei einstellbaren Modus (ja, das ist tatsächlich der Plural) verschoben werden. "Fensterinhalt bei ziehen anzeigen" und eben nicht. Leider verhält sich das oben Beschriebene in beiden Modus anders.
soll, da ich das selbst schon genutzt habe und sich hier immer
wie erwartet verhalten hat.
Das heisst entweder wird das komplette Fenster per Magnet
an den Rand angedockt, oder eben nur das gezeichnete Rechteck,
wenn das der Nutzer so wünscht und eingestellt hat.
Muß damit mal kurz gegen meine kleine Regel (no Code)
verstoßen, aber was soll's:
Code: Alles auswählen
;
; Workarea Border Magnet
;
; by Danilo, 9th March 2005
;
#MAGNET = 25
Procedure WndProc(hWnd,Msg,wParam,lParam)
Static MouseMoveX,MouseMoveY
If hWnd = WindowID(0)
Select Msg
Case #WM_NCLBUTTONDOWN
GetWindowRect_(hWnd,rect.RECT)
MouseMoveX = (lParam & $FFFF) - rect\left
MouseMoveY = ((lParam >> 16)&$FFFF) - rect\top
Case #WM_MOVING
*rect.RECT = lParam
If *rect
width = *rect\right - *rect\left
height = *rect\bottom - *rect\top
SystemParametersInfo_(#SPI_GETWORKAREA,0,rect.RECT,0)
If *rect\left < #MAGNET ; left
*rect\left = 0 : modified = 1
EndIf
If *rect\top < #MAGNET ; top
*rect\top = 0 : modified = 1
EndIf
If *rect\right > rect\right - #MAGNET ; right
*rect\left = rect\right - width : modified = 1
EndIf
If *rect\bottom > rect\bottom - #MAGNET ; bottom
*rect\top = rect\bottom - height : modified = 1
EndIf
If modified
*rect\right = *rect\left + width
*rect\bottom = *rect\top + height
SetCursorPos_(*rect\left+MouseMoveX,*rect\top+MouseMoveY)
ProcedureReturn #TRUE
EndIf
EndIf
EndSelect
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Move me!")
SetWindowCallback(@WndProc())
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindownicht korrekt, freedimension? Oder was meintest Du genau?
Danke schonmal!
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
Ich hatte bei einer Anwendung einmal einen Magnetrand (das erste und bisher einzige Mal) programmiert. Dabei hatte ich einen, für mich unerklärlichen Bug, der bei einigen Freunden auftauchte, bei mir allerdings nicht. Nach langem Suchen bin ich dann darauf gestoßen, dass hier eben diese Einstellung dazu führte. Bei gesetztem Häkchen wird das Fenster nicht nur beim Ziehen angezeigt, sondern auch noch gleich mitbewegt. Die XY-Koordinaten änderten sich von Aufruf zu Aufruf. Ich weiß jetzt leider nicht mehr, warum ich diese benötigt hatte, aber es gab einen triftigen Grund. Aber es gab auch schon andere Personen die mir von Problemen mit eben dieser Einstellung berichtet hatten.
Achja, ich erachte Deine Lösung noch nicht als optimal. Man muss das Fenster ja richtiggehend vom Rand wegreißen da der Mauscursor bei zu geringer Bewegung ständig wieder auf den selben Platz geschoben wird. Auch verhält sich das Fenster, zumindest hier bei mir, etwas träge wenn es eingerastet ist. Ansonsten aber ein guter Ansatzpunkt.
Achja, ich erachte Deine Lösung noch nicht als optimal. Man muss das Fenster ja richtiggehend vom Rand wegreißen da der Mauscursor bei zu geringer Bewegung ständig wieder auf den selben Platz geschoben wird. Auch verhält sich das Fenster, zumindest hier bei mir, etwas träge wenn es eingerastet ist. Ansonsten aber ein guter Ansatzpunkt.
Das ist auch keine Lösung, sondern ein einzelnes Beispiel wasfreedimension hat geschrieben:Achja, ich erachte Deine Lösung noch nicht als optimal.
ich vorhin schnell gemacht habe, so dass Du mir daran zeigen
kannst wann Dein besagter Fehler kommt.
Wenn Du das mit der Mouseabfrage (und SetCursorPos) rausmachst,freedimension hat geschrieben:Man muss das Fenster ja richtiggehend vom Rand wegreißen da der Mauscursor bei zu geringer Bewegung ständig wieder auf den selben Platz geschoben wird. Auch verhält sich das Fenster, zumindest hier bei mir, etwas träge wenn es eingerastet ist.
dann ist es besser. Dann muß allerdings noch eine Abfrage rein
wie weit die Mouse vom ursprünglichen Punkt entfernt ist, sonst
kann man mit dieser Methode den Cursor ganz langsam wegbewegen,
wenn das Fenster einmal angedockt ist.
Hab deshalb vorhin den einfachsten Weg gewählt um das zu
verhindern...
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
