Español
Foro

EINFACHE Resize-Rutina

 

Christof
Neuß
¡Hola,

y aquí veces otra vez una Einsteigerfrage.

Yo habe una muy einfaches Ventana principal. Darin son sólo unos pocos Buttons y unos pocos Textos enthalten. Wenn el Anwender el Ventana vergrößert oder verkleinert debería sólo el enthaltenen Objetos entprechend größer oder kleiner voluntad (also prozentual para Ventana principal). Das kann También me gusta sólo después de el Suelte el botón del ratón tener lugar.

Grundsätzlich fange I, con ...%key=4 also el Ereignis de y verzweige en el Resize-Rutina.
Dort debería Yo eigentlich sólo para todos enthaltenen Objetos el Position y el Größe neu conjunto. Como Yo esta berechne me está auch klar.

Was No klar es:

¿Cómo se puede Yo z.B. todos enthaltenen Objetos en una Array packen, así esta nacheinander abgearbeitet voluntad, sin dass Yo en una neuen Objeto daran denken muss, dieses en el Resize-Rutina einzubinden?

¿Cómo se puede Yo el akutelle Position des Objektes ermitteln, en entonces el neue Position a conjunto?

Tal vez Yo aber auch otra vez veces Tomaten en el Augen....

DANKE para jede Ayuda.
KompilierenMarcaSeparación
 $P+
SET(ERRORLEVEL,0)
DECLARE RICHEDIT1&
DECLARE BUTTON1&,BUTTON2&,BUTTON3&,BUTTON4&,BUTTON5&,BUTTON6&,BUTTON7&,BUTTON8&
DECLARE Textfeld1&,ENDE%
DECLARE RADIOBUTTON1&, RADIOBUTTON2&
DECLARE Breite%, Hoehe%
DEF GETSYSCOLOR(1) !USER32,GetSysColor
VAR RZVersion$=X
VAR Arial16Fett&=Create(Font,Arial,16,0,1,0,0)
VAR Arial18Fett&=Create(Font,Arial,18,0,1,0,0)
WINDOWSTYLE 63
WINDOWTITLE Union Investment
WINDOW 143,41-756,587
CLS GETSYSCOLOR(15)
USEFONT ARIAL,16,0,0,0,0
SETDIALOGFONT 1
Breite%=Width(%HWND)
Hoehe%=Height(%HWND)
Hier kann ggf. Ihr Menü hin
BUTTON1&   = CREATE(BUTTON,%HWND,--- Bitte zuerst RZ-Version wählen ---,0020,0025,0450,0030)
BUTTON2&   = CREATE(BUTTON,%HWND,2. Union Investment-Volumina aus Internet ziehen,0020,0060,0450,0030)
BUTTON3&   = CREATE(BUTTON,%HWND,3. Stammdaten zur Berichtserstellung erfassen,0020,0095,0450,0030)
BUTTON4&   = CREATE(BUTTON,%HWND,4. Qualitative Fragen beantworten,0020,0130,0450,0030)
BUTTON5&   = CREATE(BUTTON,%HWND,5. Analyseprogramm starten,0020,0165,0450,0030)
BUTTON6&   = CREATE(BUTTON,%HWND,6. Auswertungsdatei versenden,0020,0200,0450,0030)
SetFont Button1&, Arial18Fett
SetFont Button2&, Arial18Fett
SetFont Button3&, Arial18Fett
SetFont Button4&, Arial18Fett
SetFont Button5&, Arial18Fett
SetFont Button6&, Arial18Fett
BUTTON7&  = CREATE(BUTTON,%HWND,Drucken,0662,0517,0070,0030)
BUTTON8&  = CREATE(BUTTON,%HWND,ENDE,0662,0199,0070,0030)
SetFont Button8&, Arial18Fett
RADIOBUTTON1& = CREATE(RADIOBUTTON,%HWND,BB3  ,0490,0165,0060,0030)
RADIOBUTTON2& = CREATE(RADIOBUTTON,%HWND,agree,0560,0165,0060,0030)

if RZVersion$=BB3

    SetCheck RADIOBUTTON1&,1
    SetText BUTTON1&, 1. Info-Abfragen erstellen

elseif RZVersion$=agree

    SetCheck RADIOBUTTON2&,1
    SetText BUTTON1&, 1. IDA-Abfragen erstellen

endif

Textfeld1& = CREATE(Text,%HWND,Bitte klicken Sie nacheinander die Buttons an.
Im unteren Textfeld werden Ihnen dann Hinweise
für die einzelnen Schritte gezeigt oder Daten abgefragt.,0490,0027,0254,0130)
SetFont Textfeld1&, Arial16Fett
RICHEDIT1& = CREATE(RICHEDIT,%HWND,,0018,0234,0716,-0277)
SETFOCUS(%HWND)
REPAINT

WHILENOT ENDE%

    WAITINPUT

    If %KEY=2 Schließ-X wurde geklickt

        ENDE%= 1

    ELSEIF %KEY=4  Größe wurde geändert

        Resize()

    ELSEIF CLICKED(BUTTON1&) BUTTON IDA-Abfragen oder Info-Abfragen

        IF GetCheck(RADIOBUTTON1&)=1

            HinweisText1BB3()

        elseIf GetCheck(RADIOBUTTON2&)=1

            HinweisText1agree()

        else

            MessageBox(Bitte zuerst RZ-Version wählen!!!,ACHTUNG,4144)

        ENDIF

    ELSEIF CLICKED(BUTTON2&) BUTTON

    ELSEIF CLICKED(BUTTON3&) BUTTON

    ELSEIF CLICKED(BUTTON4&) BUTTON

    ELSEIF CLICKED(BUTTON5&) BUTTON

    ELSEIF CLICKED(BUTTON6&) BUTTON

    ELSEIF CLICKED(BUTTON7&) BUTTON

    ELSEIF CLICKED(BUTTON8&) BUTTON

        ENDE%=1

    ELSEIF CLICKED(RADIOBUTTON1&)

        SetText BUTTON1&, 1. Info-Abfragen erstellen

    ELSEIF CLICKED(RADIOBUTTON2&)

        SetText BUTTON1&, 1. IDA-Abfragen erstellen

    ENDIF

ENDWHILE

DeleteObject Arial16Fett
DeleteObject Arial18Fett

PROC HinweisText1BB3

    SetText Richedit1&,
    Hier der eine Text

ENDPROC

PROC HinweisText1agree

    SetText Richedit1&,
    Und hier der andere Text

ENDPROC

PROC Resize

    VAR BreiteFaktor!=Width(%HWND)/Breite%
    VAR HoeheFaktor!=Height(%HWND)/Hoehe%
    VAR NeuePosW%=0
    VAR NeuePosS%=0
    VAR NeueBreite%=0
    V
NeueHoehe%=0 ENDPROC
 
Win10 16 GB RAM
11.02.2009  
 



Christof Neuß
¿Cómo se puede Yo z.B. todos enthaltenen Objetos en una Array packen, así esta nacheinander abgearbeitet voluntad, sin dass Yo en una neuen Objeto daran denken muss, dieses en el Resize-Rutina einzubinden?


Z.B. indem Usted Usted una (pseudo) Markup-Language bereitstellst el el Stapel el/Deiner Controls je después de Su vergebenen Attributen anordnet. Komfortabel es el Principio sin embargo (desafortunadamente) sólo entonces, si la Markup-Language entsprechend mächtig y ausgearbeitet es, also en Deinem Fall viel Vorarbeit. Solch Markup-Language debería wir tal vez veces gemeinsam angehen o. ausarbeiten. Ein natives Ejemplo como DLL es z.B. ProLayout [...]  de René.

Christof Neuß
¿Cómo se puede Yo el akutelle Position des Objektes ermitteln, en entonces el neue Position a conjunto?


El aktuelle Position z.B. por getClientRect [...]  , (aber) en una neue Position a conjunto (z.B. por setWindowPos) benötigt uno el alte Position meistens más no.

Tatsächlich es el Anordnen/Bereitstellen el Controls el Grossteil el Aussenwirkung uno Programmes y así (desafortunadamente) no a uno einfachen Formel zusammenfassbar - el Lösungen son meist bastante adaptado - y XProfan hay lauter Lösungswege je después de el tatsächlichen Anforderungen a el Programa. [...]  [...]  [...]  [...] 

Ab XProfan11 sería Yo el SubClassProc nutzen, en en Los cambios el Größe reagieren a puede.

Ein Minimalbeispiel kann Yo en el Moment no puesto.
 
11.02.2009  
 




RGH
¡Hola,

así es:

1. Yo packe todos Elemente des Dialogs/Fensters en una dynamisches Array. Hier en el Ejemplo es el Array Elemente&[]

2. Yo necesidad zwei Apifunktionen y una Struktur:
DEF GetWindowRect(2) !"USER32","GetWindowRect"
DEF MapWindowPoints(4) !"USER32,MapWindowPoints"
STRUCT Groesse = X1&, Y1&, X2&, Y2&

GetWindowsRect ermittelt el Bildschirmposition uno Elementes y liefert zwei Eckpunkte zurück: Links Oben y Rechts Unten. Der erste Parámetro es el Handle des Elementes, el zweite el Adresse el Struktur para el beiden Punkte. Nach el Aifruf Es el Struktur gefüllt: In X1&/Y1& es el Punkt links oben y X2&/Y&2 el Punkt rechts unten. ACHTUNG: El Koordinaten beziehen se en el Bildschirm (%DeskTop) y no en unser Ventana (%Hwnd)! Hier kommt el zweie Función para Einsatz:
MapWindowPoints rechnet el Koordinaten en: Der erste Parámetro es el ursprüngliche Bezugspunkt (en unserem Fall %DeskTop) y zweite el gewünschte Bezugspunkt (en unserem Fall %HWnd). Der dritte Parámetro enthält el Adresse uno Largo-Array con el umzurechnenden Punkten. In unserem Fall es el GROESSE# con zwei Punkten. Der letzte Parámetro Es el Anzahl el Punkte, also hier el 2.
Groesse es una struktur el vier Largo-Werte para el zwei Punkte enthält y entspricht somit el Windows-Struktur RECT.

In el Procedimiento Resize se nun con GetWindowsRect para cada Element el Bildschirmposition ermittelt y MapWindowPoints en el %HWnd-Position umgerechnet. Dann se el neue Position y Größe bajo Berücksichtigung des Breite- y Höhefaktors errechnet y SetWindowPos gesetzt.

Hier el (algo abgespeckte, aber funktionsfähige) Programa:
 $P+
SET("ERRORLEVEL",0)
DECLARE ENDE%
DECLARE Breite%, Hoehe%
DECLARE Elemente&[]
DEF GetSysColor(1) !"USER32","GetSysColor"
DEF GetWindowRect(2) !"USER32","GetWindowRect"
DEF MapWindowPoints(4) !"USER32","MapWindowPoints"
STRUCT Groesse = X1&, Y1&, X2&, Y2&
DECLARE Groesse#
DIM Groesse#, Groesse
WINDOWSTYLE 63
WINDOWTITLE "Union Investment"
WINDOW 143,41-756,587
CLS GetSysColor(15)
Breite%=Width(%HWND)
Hoehe%=Height(%HWND)
Elemente&[0] = CREATE("BUTTON",%HWND,"--- Bitte zuerst RZ-Versión wählen ---",0020,0025,0450,0030)
Elemente&[1] = CREATE("BUTTON",%HWND,"2. Union Investment-Volumina de Internet ziehen",0020,0060,0450,0030)
Elemente&[2] = CREATE("BUTTON",%HWND,"3. Stammdaten a Berichtserstellung erfassen",0020,0095,0450,0030)
Elemente&[3] = CREATE("BUTTON",%HWND,"4. Qualitative Fragen beantworten",0020,0130,0450,0030)
Elemente&[4] = CREATE("BUTTON",%HWND,"5. Analyseprogramm starten",0020,0165,0450,0030)
Elemente&[5] = CREATE("BUTTON",%HWND,"6. Auswertungsdatei versenden",0020,0200,0450,0030)
Elemente&[6] = CREATE("BUTTON",%HWND,"Drucken",0662,0517,0070,0030)
Elemente&[7] = CREATE("BUTTON",%HWND,"ENDE",0662,0199,0070,0030)
Elemente&[8] = CREATE("RADIOBUTTON",%HWND,"BB3  ",0490,0165,0060,0030)
Elemente&[9] = CREATE("RADIOBUTTON",%HWND,"agree",0560,0165,0060,0030)
SetCheck Elemente&[8],1
SetText Elemente&[0]," 1. Info-Abfragen erstellen"
Elemente&[10] = CREATE("Text",%HWND,"Bitte clic Sie nacheinander el Buttons a.",0490,0027,0254,0130)
'+
'Im unteren Textfeld voluntad Ihnen entonces Hinweise
'+ para cada Schritte gezeigt oder Daten abgefragt.
Elemente&[11] = CREATE("RICHEDIT",%HWND,"",0018,0234,0716,-0277)
SETFOCUS(%HWND)
REPAINT

WHILENOT ENDE%

    WAITINPUT

    If %KEY=2'Schließ-X wurde geklickt

        ENDE%= 1

    ELSEIF %KEY=4'Größe wurde geändert

        Resize()

    ELSEIF CLICKED(Elemente&[0])'BUTTON IDA-Abfragen oder Info-Abfragen

        IF GetCheck(Elemente&[8])=1

            HinweisText1BB3()

        elseIf GetCheck(Elemente&[9])=1

            HinweisText1agree()

        más

            MessageBox("Bitte zuerst RZ-Versión wählen!!!","ACHTUNG",4144)

        ENDIF

    ELSEIF CLICKED(Elemente&[1])'BUTTON

    ELSEIF CLICKED(Elemente&[2])'BUTTON

    ELSEIF CLICKED(Elemente&[3])'BUTTON

    ELSEIF CLICKED(Elemente&[4])'BUTTON

    ELSEIF CLICKED(Elemente&[5])'BUTTON

    ELSEIF CLICKED(Elemente&[6])'BUTTON

    ELSEIF CLICKED(Elemente&[7])'BUTTON

        ENDE%=1

    ELSEIF CLICKED(Elemente&[8])

        SetText Elemente&[0], "1. Info-Abfragen erstellen"

    ELSEIF CLICKED(Elemente&[9])

        SetText Elemente&[0], "1. IDA-Abfragen erstellen"

    ENDIF

ENDWHILE

PROC HinweisText1BB3

    SetText Elemente&[11],"Hier el una Text"

ENDPROC

PROC HinweisText1agree

    SetText Elemente&[11],"Und hier el otro Text"

ENDPROC

PROC Resize

    VAR BreiteFaktor! = Width(%HWND)/Breite%
    VAR HoeheFaktor!  = Height(%HWND)/Hoehe%
    Breite%=Width(%HWND)
    Hoehe%=Height(%HWND)
    VAR NeuePosW%=0
    VAR NeuePosS%=0
    VAR NeueBreite%=0
    VAR NeueHoehe%=0

    WhileLoop 0, SizeOf(Elemente&[])-1

        GetWindowRect(Elemente&[&bucle], Groesse#)
        MapWindowPoints(%DeskTop, %HWnd, Groesse#, 2)

        With Groesse#

            NeuePosW%   = Int(.X1& * BreiteFaktor!)
            NeuePosS%   = Int(.Y1& * HoeheFaktor!)
            NeueBreite% = Int((.X2& - .X1&) * BreiteFaktor!)
            NeueHoehe%  = Int((.Y2& - .Y1&) * HoeheFaktor!)

        EndWith

        SetWindowPos Elemente&[&bucle] = NeuePosW%, NeuePosS% - NeueBreite%, NeueHoehe%

    EndWhile

ENDPROC


Saludo
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
11.02.2009  
 




Christof
Neuß
Ups,

hätte no pensamiento, dass dies así schwer es bajo XProfan. Eigentlich es doch muy profano.

Relacionado con la

getClientRect

Yo no verstanden. Si divulgar correcto sehe, bekomme Todavía así sólo simplemente una Teil la ventana zurück. Yo brauche aber el Anfangskoordinaten z.B. des Richedit-Objektes.

Mein Gedankengang es folgender:
Wenn Yo el akutellen Positionen y Größen el vorhandenen Objetos saber, kann el Koordinaten simplemente con el Vergrößerungs- (oder Verkleinerungs-)Faktoren para Breite y Höhe multiplizieren y habe así neue Anfangs- y Größenkoordinaten para cada Objeto. Jetzt bräuchte Yo esta sólo neu conjunto (Oh Mann, como macht uno una bestehenden Button porque simplemente größer? Yo muss todavía viel aprender en XProfan!) y luego neu anordnen. Fertig!

Aber así gehts probablemente no, oder?

Gracias trotzdem!
Yo werd veces versuchen, mich durchzuwurschteln. Kann uno sí sólo Erfahrungen en recoger
 
Win10 16 GB RAM
11.02.2009  
 




Christof
Neuß
Hola Roland,

danke. Jetzt haben se Su Antwort y mein BlaBla überschnitten.
Werde primero Su Antwort durcharbeiten...
 
Win10 16 GB RAM
11.02.2009  
 




Christof
Neuß
Das hilft bien más. Super. Gracias!

Puedo darauf aufbauen!
 
Win10 16 GB RAM
11.02.2009  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

1.247 Views

Untitledvor 0 min.
Sven Bader24.02.2021
Jörg Sellmeyer23.06.2020
Peter Max Müller07.10.2017
Julian Schmidt01.12.2013

Themeninformationen

Dieses Thema ha 3 subscriber:

Christof Neuß (4x)
RGH (1x)
iF (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie