Français
Forum

EINFACHE Resize-Routine

 

Christof
Neuß
Salut,

et ici la fois wieder une Einsteigerfrage.

j'ai un très simple Hauptfenster. y sommes seulement un paire Buttons et un paire Textes enthalten. si qui Anwender cela la fenêtre vergrößert ou bien verkleinert devoir seulement qui enthaltenen Objekte entprechend größer ou bien kleiner volonté (alors prozentual zum Hauptfenster). cela peux aussi volontiers seulement pour dem Loslassen qui Bouton de la souris avoir lieu.

Grundsätzlich fange je avec ...%key=4 alors cela Ereignis ab et verzweige dans qui Resize-Routine.
là devrait je eigentlich seulement pour alle enthaltenen Objekte qui Position et qui Taille récente mettons. comment je cet berechne c'est moi aussi bien sûr.

quoi Je ne bien sûr ist:

comment peux je z.B. alle enthaltenen Objekte dans un Array saisir, avec cela cet nacheinander abgearbeitet volonté, sans dass je chez einem neuen objet daran penser muss, cet dans qui Resize-Routine einzubinden?

comment peux je qui akutelle Position des Objektes ermitteln, um ensuite qui neue Position trop mettons?

peut-être habe je mais aussi wieder la fois Tomaten sur den Augen....

DANKE pour chacun Aider.
KompilierenMarqueSéparation
 $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ß
comment peux je z.B. alle enthaltenen Objekte dans un Array saisir, avec cela cet nacheinander abgearbeitet volonté, sans dass je chez einem neuen objet daran penser muss, cet dans qui Resize-Routine einzubinden?


Z.B. indem Du Dir une (pseudo) Markup-Language bereitstellst qui den Stapel qui/Deiner Controls je pour Deinen vergebenen Attributen anordnet. Komfortabel ist cela Prinzip cependant (malheureusement) seulement ensuite, si le Markup-Language entsprechend mächtig et ausgearbeitet ist, alors dans Deinem le cas viel Vorarbeit. Solch Markup-Language devrait wir peut-être la fois gemeinsam angehen bzw. ausarbeiten. un natives Beispiel comme DLL ist z.B. ProLayout [...]  de René.

Christof Neuß
comment peux je qui akutelle Position des Objektes ermitteln, um ensuite qui neue Position trop mettons?


qui aktuelle Position z.B. per getClientRect [...]  , (mais) um une neue Position trop mettons (z.B. per setWindowPos) nécessaire on qui vieille Position la plus part du temps plutôt pas.

réellement ist cela Anordnen/Bereitstellen qui Controls qui Grossteil qui Aussenwirkung eines Programmes et avec cela (malheureusement) pas trop einer einfachen Formel zusammenfassbar - qui Lösungen sommes meist assez angepasst - et XProfan gibt es lauter Lösungswege je pour den tatsächlichen Anforderungen à cela Programme. [...]  [...]  [...]  [...] 

Ab XProfan11 serait je qui SubClassProc nutzen, um sur Changements qui Taille réagir trop peut.

un Minimalbeispiel peux je im Moment pas posten.
 
11.02.2009  
 




RGH
Salut,

so ca va:

1. je packe alle Elemente des Dialogs/Fensters dans un dynamisches Array. ici im Beispiel ist es cela Array Elemente&[]

2. je besoin deux Apifunktionen et une Struktur:
DEF GetWindowRect(2) !"User32","GetWindowRect"
DEF MapWindowPoints(4) !"User32,MapWindowPoints"
STRUCT Groesse = X1&, Y1&, X2&, Y2&

GetWindowsRect ermittelt qui Bildschirmposition eines Elementes et liefert deux Eckpunkte zurück: à gauche dessus et à droite Unten. qui erste paramètre ist cela Handle des Elementes, qui zweite qui Adresse qui Struktur pour qui beiden Punkte. Pour dem Aifruf ist qui Struktur pleine: dans X1&/Y1& ist qui Punkt à gauche dessus et dans X2&/Y&2 qui Punkt à droite unten. ACHTUNG: qui Koordinaten beziehen sich sur den Bildschirm (%DeskTop) et pas sur unser la fenêtre (%Hwnd)! ici venez qui zweie Funktion zum Einsatz:
MapWindowPoints rechnet qui Koordinaten um: qui erste paramètre ist qui ursprüngliche Bezugspunkt (dans unserem le cas %DeskTop) et qui zweite qui gewünschte Bezugspunkt (dans unserem le cas %HWnd). qui dritte paramètre contient qui Adresse eines Long-Array avec den umzurechnenden Punkten. dans unserem le cas ist cela GROESSE# avec deux Punkten. qui dernier paramètre ist le nombre qui Punkte, alors ici qui 2.
Groesse ist une struktur qui quatre Long-Werte pour qui deux Punkte contient et entspricht somit qui Windows-Struktur RECT.

dans qui Procédure Resize wird eh bien avec GetWindowsRect pour chaque Element qui Bildschirmposition ermittelt et MapWindowPoints dans qui %HWnd-Position umgerechnet. ensuite wird qui neue Position et Taille sous Berücksichtigung des Breite- et Höhefaktors errechnet et SetWindowPos gesetzt.

ici cela (quelque chose abgespeckte, mais funktionsfähige) Programme:
 $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,"--- s'il te plaît d'abord RZ-Version choisir ---",0020,0025,0450,0030)
Elemente&[1] = CREATE("BUTTON",%HWND,"2. Union Investment-Volumina aus Internet ziehen",0020,0060,0450,0030)
Elemente&[2] = CREATE("BUTTON",%HWND,"3. Stammdaten zur 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 klicken vous nacheinander qui Buttons à.",0490,0027,0254,0130)
'+
'Im unteren Textfeld volonté Ihnen ensuite Hinweise
'+ pour chaque Schritte gezeigt ou bien données abgefragt.
Elemente&[11] = CREATE("RICHEDIT",%HWND,»,0018,0234,0716,-0277)
SETFOCUS(%HWND)
REPAINT

WHILENOT ENDE%

    WAITINPUT

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

        ENDE%= 1

    ELSEIF %KEY=4'Taille wurde geändert

        Resize()

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

        IF GetCheck(Elemente&[8])=1

            HinweisText1BB3()

        elseIf GetCheck(Elemente&[9])=1

            HinweisText1agree()

        d'autre

            MessageBox("Bitte d'abord RZ-Version choisir!!!","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 qui une Text"

ENDPROC

PROC HinweisText1agree

    SetText Elemente&[11],"Und ici l'autre 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&[&loop], 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&[&loop] = NeuePosW%, NeuePosS% - NeueBreite%, NeueHoehe%

    Endwhile

ENDPROC


Salut
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 pas gedacht, dass ca so schwer ist sous XProfan. Eigentlich ist es doch très profan.

Relatif à la

getClientRect

habe je pas verstanden. si ego richtig vois, bekomme je doch avec cela seulement simple une partie des Fensters zurück. il me faut mais qui Anfangskoordinaten z.B. des Richedit-Objektes.

mon Gedankengang ist suivant:
si je qui akutellen Positionen et Größen qui vorhandenen Objekte kenne, peux qui Koordinaten simple avec den Vergrößerungs- (ou bien Verkleinerungs-)Faktoren pour Breite et Hauteur multiplizieren et habe so neue Anfangs- et Größenkoordinaten pour chaque objet. maintenant bräuchte je cet seulement récente mettons (eh homme, comment pouvoir on une bestehenden Button car simple größer? je muss encore viel apprendre dans XProfan!) et ensuite récente anordnen. Fertig!

mais so gehts wohl pas, ou bien?

merci quand même!
je werd la fois versuchen, mich durchzuwurschteln. peux on oui seulement Erfahrungen chez ramasser
 
Win10 16 GB RAM
11.02.2009  
 




Christof
Neuß
allô Roland,

merci. maintenant avons sich Votre Antwort et mon BlaBla überschnitten.
Werde erstmal Votre Antwort durcharbeiten...
 
Win10 16 GB RAM
11.02.2009  
 




Christof
Neuß
cela hilft bien plus. Super. merci!

je peux puis aufbauen!
 
Win10 16 GB RAM
11.02.2009  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.372 Views

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

Themeninformationen

cet Thema hat 3 participant:

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


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie