| |
|
|
Joerg | Hallo liebe XProfan Gemeinde,
ich komme nicht dahinter, was ich hier falsch mache... Das Editfeld soll sich entsprechend anpassen, wenn der Benutzer die Größe des Fensters ändert. Das klappt auch ganz gut. Nach dem Minimieren isr das Feld allerdings zu hoch. Das gleiche passiert, wenn man den unteren Rand des Fensters bis Anschlag nach oben zieht. Ich steh' auf der Leitung...
Danke Euch!! Jörg
(Xprofan X3.1/Win10)
declare prog_ende%, breite%, hoehe%, fensterhoehe%, fensterbreite%, m_edit&
fensterbreite% = 800
fensterhoehe% = 600
WindowStyle 527
Window fensterbreite%, fensterhoehe%
m_edit& = Create("MultiEdit",%hWnd, "", 20, 20, 740, 490)
WhileNot prog_ende%
Waitinput
If (%key = 2)
prog_ende% = 1
ElseIf (%key = 4)
'****************************************************************
breite% = Width(m_edit&,1) - (fensterbreite% - Width(%hWnd,1))
hoehe% = Height(m_edit&,1) - (fensterhoehe% - Height(%hWnd,1))
SetWindowPos m_edit& = 20,20 - breite%,hoehe%
fensterbreite% = Width(%hWnd,1)
fensterhoehe% = Height(%hWnd,1)
'****************************************************************
EndIf
EndWhile
END
|
|
|
| |
|
|
|
Georg Teles | Hmm naja wenn du die Änderungen beim Vergrößern sehen willst, dann empfielt sich eine Callback-Funktion - habe deinen Code mal erweitert
$H Windows.ph
$H Messages.ph
Declare OldWndProc&
'---------------------------------------------------------------------
declare prog_ende%, breite%, hoehe%, fensterhoehe%, fensterbreite%, m_edit&
fensterbreite% = 800
fensterhoehe% = 600
'-CallBack Routine----------------------------------------------------
Proc ChangeControl
Parameters hWnd&, Message&, wParam&, lParam&
Declare btnHeight&
If Message& = ~WM_SIZE
breite% = Width(m_edit&,1) - (fensterbreite% - Width(%hWnd,1))
hoehe% = Height(m_edit&,1) - (fensterhoehe% - Height(%hWnd,1))
SetWindowPos m_edit& = 20,20 - breite%,hoehe%
fensterbreite% = Width(%hWnd,1)
fensterhoehe% = Height(%hWnd,1)
EndIf
Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
EndProc
'---------------------------------------------------------------------
Set("FastMode", 1)
'---------------------------------------------------------------------
WindowStyle 527
Window fensterbreite%, fensterhoehe%
m_edit& = Create("MultiEdit",%hWnd, "", 20, 20, 740, 490)
'----------------------------------------------------------------------
OldWndProc& = ~GetWindowLong(%hWnd, ~GWL_WNDPROC)
~SetWindowLong(%hWnd, ~GWL_WNDPROC, @ProcAddr("ChangeControl",4))
'----------------------------------------------------------------------
WhileNot prog_ende%
Waitinput
If (%key = 2)
prog_ende% = 1
EndIf
EndWhile
'-Urspruengliche ProgramMainRoutine wieder herstellen------------------
~SetWindowLong(%hWnd, ~GWL_WNDPROC, OldWndProc&)
'----------------------------------------------------------------------
END
Grüße |
|
|
| |
|
|
|
Joerg | Hallo Georg,
danke für deine Mühe, das sieht sehr gut aus. Aber das Problem beim Minimieren usw. (s.o.) ist damit leider nicht behoben...
Viele Grüße!! Jörg |
|
|
| |
|
|
|
Georg Teles | Achja übersehen, mein Fehler
Versuch mal mit festen Größen, sieht um einige Pixel unschön aus, du musst hier aber von den Fenstergrößen einiges Abziehen, zB. wenn du Statuszeile hast deren Höhe ermitteln, ein Menü etc deren Höhe ermitteln und alles abziehen von der Fensterhöhe bspw
Proc ChangeControl
Parameters hWnd&, Message&, wParam&, lParam&
Declare btnHeight&
If Message& = ~WM_SIZE
breite% = Width(%hWnd,1) - 60'hier -40 für Rand Links & Rechts bzw. noch den "Fensterrand" den muss man noch ermitteln
hoehe% = Height(%hWnd,1) - 100'hier -40 Rand Links & Rechts, eventuell Höhe der Statuszeile dazunehmen und Menü etc.
SetWindowPos m_edit& = 20,20 - breite%,hoehe%
EndIf
Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
EndProc
Als Beispiel habe die festen Werte -60 und -100 genommen
Grüße |
|
|
| |
|
|