| |
|
|
Edwin Camdzic | Hi,
mich hat das Vista Design so fasziniert, dass ich es in meine XP-Programme einbauen will. Aber es hängt da scho ganz am Anfang. Denn den Aero Effekt habe ich schon hinbekommen, man kann dafür aber das Fenster nicht verschieben (blöd). Jetzt bräuchte ich bitte einen, der mir sagt wie ich ein Fenster ohne Titelzeile und ohne Menüleiste verschieben kann. Bin für jede Hilfe dankbar.
Danke im Vorraus!
Um Aero hinzubekommen, benutzt das Fenster den Desktop als Hintergrund. Wenn man das Fenster jetzt verschieben würde, so würde doch der Hintergrund der alte sein und sich nicht aktualisieren? Kann man dagegen auch etwas machen?
bye |
|
|
| |
|
|
|
Nico Madysa | Hmm, gundsätzlich kann man nichts dagegen tun, aber du könntest das Fenster außerhalb des Bildschirms erstellen. Anschließend kopierst du den Desktop als Bitmap in die Memory-Bitmap und müsstest bei jeder Fensterverschiebung den Inhalt aktualisieren. KompilierenMarkierenSeparierendeclare randbreite% , randhoehe%
Window %MaxX , %MaxY - 0 , 0
MCls %MaxX , %MaxY
StartPaint %Desktop
CopyBmpToMem 0 , 0 - %MaxX , %MaxY > 0 , 0
EndPaint
SetWindowPos %hWnd = 0 , 0 - 640 , 480
randbreite% = (%WinRight - %WinLeft - width(%hWnd)) / 2
randhoehe% = (%WinBottom - %WinTop - height(%hWnd)) / 2
MCopyBmp (%WinLeft + randbreite%) , (%WinTop + randhoehe%) - width(%hWnd) , height(%hWnd) > 0 , 0 ; 0
Habs jetzt nur in aller Schnelle zusammengetippt, testen müsstest du es allein. |
|
|
| |
|
|
|
Frank Abbing | In jedem Fall musst du dein Fenster subclassen, damit du auf diverse Messages reagieren kannst, bevor sie wirken. Im Subclassing reagierst du entsprechend auf Maustaste und Bewegung des Zeigers, um dein Fenster selber zu verschieben. Ich rate dir dazu, das Subclassing mittels XPIA vorzunehmen, weil Profancode einfach zu langsam wäre und dein Fenster nachher ins Stottern geräte. Das ist auch der Grund, warum ich überhaupt zum Subclassing rate. Profan reagiert zu träge und leider gehen auch immer Messages verloren, was in deinem Fall aber nicht passieren darf. |
|
|
| |
|
|
|
Edwin Camdzic | An Nico Madysa, das mit dem Hintergrun habe ich jetzt so irgendwie verstanden, ist eh nicht so schwer. Danke.
Zu Frank Abbing, ich bin kein wirklich guter Programmierer, das wäre wahrscheinlich zu hoch für mich, aber wäre es nicht möglich während des verschiebens, den Fensterinhalt zu löschen und beim loslassen der Maus ihn wieder aufzubauen?
Wenn du mir bitte zeigen könntest, wie man mit dem ProfanCode machen würde wäre es sehr nett, denn die Anwendung ist nichts sehr anspruchvolles, nur füe Eigengebrauch. (d.h. stottern macht nichts)
Danke! |
|
|
| |
|
|
|
Nico Madysa | Hab den Schwachpunkt in meinem Code schon gefunden; der Hintergrund darf nicht verändert werden. |
|
|
| |
|
|
|
| Momentmal - ich finde alle hier vorgeschlagenen Lösungen unrichtig - das Ganze geht sogar sehr einfach! Ich werd mal sowat hinpinseln und hier den code posten.
Punkt eins ist also einfach - Punkt 2 ist jedoch nicht möglich. |
|
|
| |
|
|
|
Nico Madysa | Pun´kt 1 ist ...was? Der Bildschirmhintergrund? Der ist bestimmt möglich, und Punkt 2, das Umherschieben ohne Titelleiste garantiert auch, ich hab da schonmal so einige Codesnippets gesehen. Mal gucken... |
|
|
| |
|
|
|
Nico Madysa | So, hier hab ich zwei Codes gefunden, gucke mal, ob sie deine Zwecke erfüllen. |
|
|
| |
|
|
|
| Geht doch gut: KompilierenMarkierenSeparieren {$cleq}
seterrorlevel -1
mem globmousepos=8
long g_mousex,g_mousey
windowstyle 80// ohne titel und ohne menüleiste
window 100,100 - 640,480
cls 0
do {
paintwin
waitinput
case %key==27 : break
case mousepressed : case mousey<20 : movewindowproc
}
dispose globmousepos
end
paintwin {
long xx=width(hwnd)
long yy=height(hwnd)
usepen 0,0,$00FFFFFF
usebrush 1,$0000BBBB
rectangle 0,0 - xx,yy
usepen 5,0,0
usebrush 1,$00FF0000
rectangle 0,0 - xx,20
}
movewindowproc {
getmousepos
long omx=g_mousex
long omy=g_mousey
long x=winleft
long y=wintop
do {
casenot mousepressed : break
sleep 10
getmousepos
setwindowpos hwnd=(x+g_mousex-omx),(y+g_mousey-omy) - 640,480;0
}
}
getmousepos {
getcursorpos(globmousepos)
g_mousex=long(globmousepos,0)
g_mousey=long(globmousepos,4)
}
|
|
|
| |
|
|
|
Frank Abbing | Simple Lösung, wohl nur für ein kleines Testprogramm gut. Während des Verschiebens kommen keinerlei Fenstermessages mehr an. Hättest zumindest einen Timer einsetzen können. Eine vernünftige Lösung beinhaltet Subclassing, alles andere bringt nicht viel ausser Problemen, sobald das Programm wächst.. |
|
|
| |
|
|
|
Edwin Camdzic | |
|
| |
|
|
|
| Tjah - hätteste meinen Code genommen könntest den leicht ausbauen. Ansonsten gilt auch für Dich: [tb]minimalbeispiel[/tb] |
|
|
| |
|
|