Forum | | | |  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
|
| | | | |
| |  | | | | | |
| |  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:
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  |
| | | | |
| |  Christof Neuß | allô Roland,
merci. maintenant avons sich Votre Antwort et mon BlaBla überschnitten. Werde erstmal Votre Antwort durcharbeiten... |
| | | | |
| |  Christof Neuß | cela hilft bien plus. Super. merci!
je peux puis aufbauen! |
| | | | |
|
répondreOptions du sujet | 1.372 Views |
Themeninformationencet Thema hat 3 participant: |