Deutsch
Forum

Editfeld an Fenster anpassen

 

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
 
16.06.2016  
 




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
 
XProfan X3
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

16.06.2016  
 




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
 
16.06.2016  
 




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
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

16.06.2016  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.664 Betrachtungen

Unbenanntvor 0 min.
Frank Reibold25.11.2022
iF31.10.2020
Torben Nissen26.04.2020
Peter Max Müller07.10.2017
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Georg Teles (2x)
Joerg (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie