Foro | | | | - Página 1 - |
| Julian Schmidt | ¡Hola, Yo sería gerne de optischen Gründen una Ventana redactar el weiterhin skalierbar es, allerdings no Dicken Rahmen besitzt. Ist así algo posible?
LG
Julian57 |
| | | | |
| | « Dieser Contribución wurde como Solución gekennzeichnet. » | | Andreas Miethe
| IF (21.09.11)
Usted hast sí ya una fetten Block: caso (%mouseXheight(%hWnd)-10) : hwnd.scaleByMouse()
IF (21.09.11)
como kannst Usted doch el hWnd.scaleByMouse-Proc como Parámetro transferencia welche Ecke/ Kante gemeint war en a Ersparen el Usted el en el Proc sólo otra vez ermitteln musst.
Es me irgendwie gegen el Strich
Das se normalerweise en Message WM_NCHITTEST geregelt.
Hier veces una kleines Ejemplo para una skalier / verschiebbaren Button. Sollte se wohl para una Ventana adaptar dejar.
$H Windows.ph
$H Messages.ph
$H Structs.ph
STRUCT TRect = ~Rect
STRUCT TPoint = ~Punto
Proc HitTest
Parámetros hCtl&,lParam&
Declarar Punto#
Declarar Rect#
Dim Punto#,TPoint
Dim Rect#,TRect
Punto#.x& = LoWord(lParam&)
Punto#.y& = HiWord(lParam&)
~ScreenToClient(hCtl&,Punto#)
~GetWindowRect(hCtl&,Rect#)
~MapWindowPoints(~GetDesktopWindow(),%Hwnd,Rect#,2)
If (Punto#.y& < 4) AND (Punto#.x& < 4)
Disponer Punto#,Rect#
Volver ~HTTOPLEFT
ElseIf (Punto#.y& < 4) AND (Punto#.x& >= (Rect#.right& - Rect#.left&-4))
Disponer Punto#,Rect#
Volver ~HTTOPRIGHT
ElseIf (Punto#.y& >= (Rect#.bottom& - Rect#.top&-4)) AND (Punto#.x& >= (Rect#.right& - Rect#.left&-4))
Disponer Punto#,Rect#
Volver ~HTBOTTOMRIGHT
ElseIf (Punto#.x& < 4) AND (Punto#.y& >= (Rect#.bottom& - Rect#.top& - 4))
Disponer Punto#,Rect#
Volver ~HTBOTTOMLEFT
ElseIf Punto#.y& < 4
Disponer Punto#,Rect#
Volver ~HTTOP
ElseIf Punto#.x& < 4
Disponer Punto#,Rect#
Volver ~HTLEFT
ElseIf Punto#.x& >= (Rect#.right& - Rect#.left& - 4)
Disponer Punto#,Rect#
Volver ~HTRIGHT
ElseIf Punto#.y& >= (Rect#.bottom& - Rect#.top& - 4)
Disponer Punto#,Rect#
Volver ~HTBOTTOM
Más
Disponer Punto#,Rect#
Volver ~HTCAPTION
EndIf
ENDPROC
SubClassProc
If SubClassMessage(&sWnd,~WM_NCHITTEST)
Conjunto("WinProc", 0)
Volver HitTest(&swnd,&slParam)
Endif
ENDPROC
cls
Var Ende& = 0
Var Button& = Crear("Button",%hwnd,"OK",10,10,120,30)
SubClass Button&,1
whilenot ende&
waitinput
endwhile
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 21.09.2011 ▲ |
| | |
| | | Sí natürlich y como hay viele Wege -
erzeuge z.B. simplemente una Ventana el no dicken Rahmen besitzt y reagiere en el subClassProc en wm_mouseMove a richtiger Position hacer frente a wm_setCursor en el Mauspfeil optisch anzupassen y en wm_lButtonDown speicherst en Globalen aktuelle Breite y Höhe y Mausposition y una IchSkaliereGrad-Flag y zusätzlich en wm_mouseMove si IchSkaliereGrad-Flag gesetzt es simplemente por setWindowPos el FensterGröße adaptar. |
| | | | |
| | Julian Schmidt | IF (20.09.11)
erzeuge z.B. simplemente una Ventana el no dicken Rahmen besitzt y reagiere en el subClassProc en wm_mouseMove a richtiger Position hacer frente a wm_setCursor en el Mauspfeil optisch anzupassen y en wm_lButtonDown speicherst en Globalen aktuelle Breite y Höhe y Mausposition y una IchSkaliereGrad-Flag y zusätzlich en wm_mouseMove si IchSkaliereGrad-Flag gesetzt es simplemente por setWindowPos el FensterGröße adaptar.
Hört se alles otro como simplemente a. Hast du así qué ya gemacht y vlt una Ver código fuente parat? |
| | | | |
| | | Nein Yo dazu nichts parat aber una Ejemplo dafür schreibt se fast de incluso:
/*
{$ Cleq}
{$compiler c:\XProfan11\}
{$runtime c:\XProfan11\}
*/
windowstyle 1 | 2 | 8 | 16 | 512
window 640,480
mensajes de los usuarios 16,513,20//wm_close,wm_lButtonDown,wm_eraseBkGnd
subClass %hWnd,1
mientras que 1
waitInput
seleccionar %uMessage
caseof 16 : romper
caseof 513
caso (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10) : hWnd.scaleByMouse()
EndSelect
wend
end
subClassProc
caso subClassMessage(%hWnd, 512):useCursor (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10)*7//wm_mouseMove
endProc
proc hWnd.scaleByMouse
declarar m#
dim m#,8
external("user32","GetCursorPos",m#)
var omx%=long(m#,0)
var omy%=long(m#,4)
var wi&=%winRight-%winLeft
var he&=%winBottom-%winTop
mientras que isKey(1)
waitInput 10
external("user32","GetCursorPos",m#)
setWindowPos %hWnd=%winLeft,%winTop - wi&-omx%+long(m#,0),he&-omy%+long(m#,4)
wend
disponer m#
endProc
Un XPSE-Variante:
{$cleq}
{$compiler c:\XProfan11\}
{$runtime c:\XProfan11\}
windowstyle 1 | 2 | 8 | 16 | 512
window 640,480
mensajes de los usuarios wm_close,wm_lButtonDown
subClass hWnd,true
setClassLong(hWnd,gcl_style,getClassLong(hWnd,gcl_style)-cs_hRedraw-cs_vRedraw)
do {
waitInput
seleccionar %uMessage
caseof wm_close : romper
caseof wm_lButtonDown
caso (mouseX>width(hWnd)-10) and (mouseY>height(hWnd)-10) : hWnd.scaleByMouse()
EndSelect
}
end
subClassProc{
caso subClassMessage(hWnd, wm_mouseMove) : useCursor (mouseX>width(hWnd)-10) and (mouseY>height(hWnd)-10)*7
}
hWnd.scaleByMouse(){
mem m=point
getCursorPos(m)
long omx=m::x&,\
omy=m::y&,\
wi=winRight-winLeft,\
he=winBottom-winTop
do {
casenot isKey(1) : romper
waitInput 10
getCursorPos(m)
setWindowPos hWnd=winLeft,winTop - wi-omx+m::x&,he-omy+m::y&
}
disponer m
}
En diesem Ejemplo hast Usted bezogen el Ventana principal unten rechts una Greifpunkt. |
| | | | |
| | Julian Schmidt | Kann uno esta Greifpunkte auch en todos Ecken, Páginas übertragen? |
| | | | |
| | | Usted puede doch por Code así viele Ecken y Kanten definieren como Usted magst y en Murmelei reagieren. oO |
| | | | |
| | Julian Schmidt | Öhm...sí sólo Yo bekomme el con el Cursors no geregelt.
Was es el para una komische Konstruktion en el SubclassProc?
useCursor (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10)*7 El normalen Parámetro para UseCursor sehen doch anders de!?
windowstyle 1 | 2 | 8 | 16 | 512 | 64
window 640,480
cls RGB(255,0,0)
mensajes de los usuarios 16,513,20
subClass %hWnd,1
mientras que 1
waitInput
seleccionar %uMessage
caseof 16 : romper
caseof 513
caso (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseX<10) and (%mouseY<10) : hwnd.scaleByMouse()
caso (%mouseX>width(%hWnd)-10): hwnd.scaleByMouse()
caso (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseX<10) : hwnd.scaleByMouse()
caso (%mouseY<10) : hwnd.scaleByMouse()
EndSelect
caso iskey(27) : end
wend
end
subClassProc
caso subClassMessage(%hWnd, 512): caso (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10): UseCursor 7//wm_mouseMove
caso subClassMessage(%hWnd, 512): caso (%mouseX<10) and (%mouseY<10): UseCursor 9//wm_mouseMove
endProc
proc hwnd.scaleByMouse
declarar m#
dim m#,8
external("user32","GetCursorPos",m#)
var omx%=long(m#,0)
var omy%=long(m#,4)
var wi&=%winRight-%winLeft
var he&=%winBottom-%winTop
mientras que isKey(1)
waitInput 10
external("user32","GetCursorPos",m#)
setWindowPos %hWnd=%winLeft,%winTop - if(wi&-omx%+long(m#,0)>0,wi&-omx%+long(m#,0),10),if(he&-omy%+long(m#,4)>0,he&-omy%+long(m#,4),10)
wend
disponer m#
endProc
|
| | | | |
| | | ... aber auch sólo porque Usted lo eben no regelst.
Usted definierst z.B. no useCursor 0 en el Fall el eben kein Sondercursor gezeigt voluntad se.
Diese de Usted como "komisch" y como "Konstruktion" bezeichnete Anweisung sieht dies aber antes:
porque si el Argument falso es se useCursor 0 angewiesen en lugar de 7.
Den Code en todos Ecken y Kanten umzustellen es reine Fleißarbeit -
Yo quería Usted sí sólo zeigen a) el y b) cómo lo anstellen podría. |
| | | | |
| | Julian Schmidt | War trotzdem una komische Konstruktion. ^ ^ Aber ahora me está auch klar como funktionierte. Entweder wirft (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10) 1 oder 0 zurück. Dementsprechend: 0*7=0 & 1*7=7
Inzwischen es el con el Cursors alles geregelt. Yo finde sólo todavía una Bug en el Snippet y zwar el Skalieren de el Links-Oberen Ecke. Außerdem puede ser el Ventana en 2 Ecken,Kanten en una Größe de 0px ziehen, welches Yo simplemente no rausbekomme. Kann wer helfen?
windowstyle 1 | 2 | 8 | 16 | 512 | 64
window 600,400
cls RGB(255,0,0)
mensajes de los usuarios 16,513,20
subClass %hWnd,1
mientras que 1
waitInput
seleccionar %uMessage
caseof 16 : romper
caseof 513
caso (%mouseX<10) and (%mouseY<10) : hwnd.scaleByMouse()'Ecken
caso (%mouseX>width(%hWnd)-10) and (%mouseY<10) : hwnd.scaleByMouse()
caso (%mouseX<10) and (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseX<10) : hwnd.scaleByMouse()'Kanten
caso (%mouseY<10) : hwnd.scaleByMouse()
caso (%mouseX>width(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
EndSelect
caso iskey(27) : end
Endwhile
end
subClassProc
if subClassMessage(%hWnd, 512)
if ((%mouseX<10) and (%mouseY<10)) or ((%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10))
UseCursor 7
elseif ((%mouseX<10) and (%mouseY>height(%hWnd)-10)) or ((%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10))
UseCursor 8
elseif (%mouseX<10) or (%mouseX>width(%hWnd)-10)
UseCursor 9
elseif (%mouseY<10) or (%mouseY>height(%hWnd)-10)
UseCursor 10
más
UseCursor 0
Endif
Endif
endProc
proc hwnd.scaleByMouse
declarar m#
dim m#,8
external("user32","GetCursorPos",m#)
var omx%=long(m#,0)
var omy%=long(m#,4)
var wi&=%winRight-%winLeft
var he&=%winBottom-%winTop
var wleft&=%winleft
var wtop&=%winTop
mientras que isKey(1)
waitInput 10
external("user32","GetCursorPos",m#)
caso (omx%>%winLeft) and (omy%>%winTop) : setWindowPos %hWnd=%winLeft,%winTop - if(wi&-omx%+long(m#,0)>10,wi&-omx%+long(m#,0),10),if(he&-omy%+long(m#,4)>10,he&-omy%+long(m#,4),10)
caso (omx%<%winLeft+10) : setWindowPos %hWnd=long(m#,0),%winTop,(wleft&+wi&)-long(m#,0),he&
caso (omy%<%winTop+10) : setWindowPos %hWnd=%winLeft,long(m#,4),wi&,(wtop&+he&)-long(m#,4)
Endwhile
disponer m#
endProc
|
| | | | |
| | | Usted hast sí ya una fetten Block: como kannst Usted doch el hWnd.scaleByMouse-Proc como Parámetro transferencia welche Ecke/ Kante gemeint war en a Ersparen el Usted el en el Proc sólo otra vez ermitteln musst. |
| | | | |
| | Julian Schmidt | Meinst Si es usted el se entonces kürzer? Abfragen muss Yo siempre, sei lo nun en el Proc, o "fetten Block"?
Außerdem el Ermitteln cada Kante, Ecke en el Proc es auch no así schwer! Lo flackert bastante schrecklich de y a beim mover! Ein Fehler?
windowstyle 2+16+64
window 600,400
cls RGB(255,0,0)
mensajes de los usuarios 16,513,20
subClass %hWnd,1
mientras que 1
waitInput
seleccionar %uMessage
caseof 16 : romper
caseof 513
caso (%mouseX<10) and (%mouseY<10) : hwnd.scaleByMouse()'Ecken
caso (%mouseX>width(%hWnd)-10) and (%mouseY<10) : hwnd.scaleByMouse()
caso (%mouseX<10) and (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseX<10) : hwnd.scaleByMouse()'Kanten
caso (%mouseY<10) : hwnd.scaleByMouse()
caso (%mouseX>width(%hWnd)-10) : hwnd.scaleByMouse()
caso (%mouseY>height(%hWnd)-10) : hwnd.scaleByMouse()
EndSelect
caso iskey(27) : end
Endwhile
end
subClassProc
if subClassMessage(%hWnd, 512)
if ((%mouseX<10) and (%mouseY<10)) or ((%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10))
UseCursor 7
elseif ((%mouseX<10) and (%mouseY>height(%hWnd)-10)) or ((%mouseX>width(%hWnd)-10) and (%mouseY>height(%hWnd)-10))
UseCursor 8
elseif (%mouseX<10) or (%mouseX>width(%hWnd)-10)
UseCursor 9
elseif (%mouseY<10) or (%mouseY>height(%hWnd)-10)
UseCursor 10
más
UseCursor 0
Endif
Endif
endProc
proc hwnd.scaleByMouse
declarar m#
dim m#,8
external("user32","GetCursorPos",m#)
var omx%=long(m#,0)
var omy%=long(m#,4)
var wi&=%winRight-%winLeft
var he&=%winBottom-%winTop
var wleft&=%winleft
var wtop&=%winTop
mientras que isKey(1)
waitInput 10
external("user32","GetCursorPos",m#)
caso (omx%>%winLeft) and (omy%>%winTop) : setWindowPos %hWnd=%winLeft,%winTop - if(wi&-omx%+long(m#,0)>10,wi&-omx%+long(m#,0),10),if(he&-omy%+long(m#,4)>10,he&-omy%+long(m#,4),10)'Kante Unten,Recht; Ecke Rechts-Unten, Rechts-Oben
caso (omx%<%winLeft+10) and (omy%<%winTop+10) : setWindowPos %hWnd=long(m#,0),long(m#,4),(wleft&+wi&)-long(m#,0),(wtop&+he&)-long(m#,4)'Ecke Links, Oben
caso (omx%<%winLeft+10) : setWindowPos %hWnd=long(m#,0),%winTop,(wleft&+wi&)-long(m#,0),he&'Kante Links
caso (omy%<%winTop+10) : setWindowPos %hWnd=%winLeft,long(m#,4),wi&,(wtop&+he&)-long(m#,4)'Kante Oben
caso (omx%<%winLeft+10) and (omy%>%winTop+10) : setWindowPos %hWnd=long(m#,0),%winTop,(wleft&+wi&)-long(m#,0),if(he&-omy%+long(m#,4)>10,he&-omy%+long(m#,4),10)'Ecke Links-Unten
Endwhile
disponer m#
endProc
|
| | | | |
| | E.T. | ¿Por qué muss el alles siempre otra vez así kompliziert ser !!?? Wenn Yo hier en el Foro el Búsqueda benutze finde Yo etliche Beispiele a Ventana-Scalierung, incluso con allen darauf befindlichen Elementen.
If ha a una pocos Klasse Sachen beigetragen... sólo uno muss auch veces el SuFu nutzen, y lo incluso algo más entwickeln.
Wer me wohl auch angewöhnen, sólo veces después de ner Solución a fragen, bevor Yo selber el Kopf anstrenge...
SORRY !!! |
| | | XProfan X2Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 21.09.2011 ▲ |
| |
|
RespuestaTema opciones | 27.875 Views |
ThemeninformationenDieses Thema ha 5 subscriber: |