Forum | | | | holmol93 | allô miteinander
la fois wieder une très eigensinnige Frage... oO comment ist es possible, dans einem Programme plusieurs la fenêtre/Dialoge gleichzeitig im Fokus trop avons um zB avec den Dialogfenstern, qui im Hintergrund liegen, aussi Eingaben faire trop peut et pas d'abord toujours cela jeweils obere schliessen trop doit?
Beispiel wäre zB, dass on qui Artikelverwaltung et un Auftragsfenster offen hat et dans beiden travailler peux... alors beliebig viele la fenêtre offen hat et alle Eingaben entgegen prendre peut...
je n'en sais rien, comment je cela oui c'est ca décrire peux... Habe im Anhang la fois mon derzeitiges Spassprojekt angehängt, avec allen Datenbankfiles, dem Voir le texte source et einer vorkompilierten Exe zum Testen... peut-être peux on es sich ensuite besser présenter... Momentan funktioniert toujours seulement cela la fenêtre, welches im Vordergrund ist...
Testaccounts:
PW: 3333 - Benutzer avec très wenigen Rechten PW: 98553 - mon Account avec so assez allen Rechten. qui peux on variable zuteilen übers MitarbeiterMaster.
Hat encore assez viele Bugs, zeigt mon Problem mais droite bien... Gruess, Danny |
| | | | |
| | Julian Schmidt | Du könntest mittels WindowFromPoint cela négoce sous qui souris ermitteln. et alle Tasteneingaben à cela la fenêtre weiterleiten.
ici un entier primitives Beispiel.
Def @GetParent(1) !"User32","GetParent"
CLS
Déclarer hhdl&
Créer("Button",%hwnd,"test",10,10,200,30)
Tandis que 1
WaitScan
hhdl&=HandleHover()
Si (GetParent(hhdl&)=%hwnd) or (hhdl&=%hwnd)
Si %ScanKey=8
Settext hhdl&,Mid $(Gettext$(hhdl&),1,Len(Gettext$(hhdl&))-1)
D'autre
Settext hhdl&,Gettext$(hhdl&)+Inkey$()
EndIf
Endif
Endwhile
Proc HandleHover
Déclarer mpos#
Faible mpos#,8
Externe("user32","GetCursorPos",mpos#)
Var hdl&=Externe("User32","WindowFromPoint",long(mpos#,0),long(mpos#,4))
Dispose mpos#
Retour hdl&
ENDPROC
|
| | | | |
| | Julian Schmidt | Hab la fois deinen Voir le texte source angeschaut.
Mir ist aufgefallen cela du dans qui Procedur "accessrights" 45 durchnummerierte Variablen pour deine Rechterverwaltung verwendest. Leichter wäre ici qui Verwendung eines Arrays.
|
| | | | |
| | holmol93 | Heyhoo
à cause de deiner ersten Antwort: je muss mir den Voir le texte source la fois oui c'est ca anschauen, im Moment verstehe je là seulement gare hihi mon Programmierkenntnisse sommes doch encore droite beschränkt, avant allem si es um systemnahe Funktionen allez... Muss mich la fois par cela Befehlsregister fouiller, quoi chacun Anweisung en oui c'est ca bewirkt
trop qui Rechtezuteilung:
Hehe, là avons wirs wieder ;) je wusste jusqu'à plan pas einmal, quoi Arrays sommes, c'est pourquoi hab je mir so plus geholfen, comme mir autrefois dans den Sinn gekommen ist mais je weiss, dass quelques Funktionen encore pas justement sinnvoll, geschweige car performant mise en œuvre sommes... jusqu'à dahin wird encore einiges l'eau sur den Rhein aller ;)
Im Moment voudrais je d'abord einmal den Mehrfensterbetrieb dans den Griff bekommen... car sans ist qui ganze Software très mühsam trop bedienen^^ (avec cela on dans qui Auftragsübersicht également une Vue d'ensemble sur alle Artikel einblenden peux, sans alle la fenêtre d'abord trop schliessen, habe je mir jusqu'à maintenant avec einem Hotkey beholfen (F1) , qui une kleinen Dialogue avec les allen Artikeln einblendet)
Greetz,
Danny |
| | | | |
| | Julian Schmidt | Vieleicht peux du la fois un minimalistisches Beispiel posten.quoi aufzeigt comment dein Fensterbetrieb justement aussieht. et anschließend décrire comment du dir den Mehrfensterbetrieb vorstellst.
je crois ici aucun Lust une Tausendzeilen-Code durchzusuchen. et mir ist aussi encore pas bien sûr quoi du eig veux. |
| | | | |
| | holmol93 | Ah alors:
je beziehe mich dabei toujours sur unser Access basierendes Datenbanksystem im magasin. je peux so viele Formulare offen avons, comment je veux, sobald comment je de einem ins autre la fenêtre wechsle, peux je Eingaben faire.
chez mir ists oui maintenant grade so: tu veux une Auftrag chercher. alors gehtst du zB dans qui Kundendaten, wählst là une Kunden aus. qui Kundendetails ouvrir sich. de là klickst du sur une Auftrag. qui Auftrag ouvrez sich. maintenant avons wir 3 la fenêtre offen. je peux cependant, sans d'abord alle "übergeordneten" dans qui Reihenfolge trop schliessen, pas simple so quelque chose dans qui Kundenübersicht faire. Klicken allez déjà, cependant reagiert rien, solang comment cela Auftragsfenster aktiv ist.
j'ai là déjà rumprobiert avec den verschiedenen Fensterstilen, là je gemeint habe, es liegt am Dialogfensterstil. mais si cela so wäre, pourrait je oui im %HWND quand même Eingaben vornehmen, quoi cependant aussi pas possible ist
Gruess, Danny |
| | | | |
| | Julian Schmidt | je vais en aus cela du pour chaque la fenêtre une Boucle la hâte, dans qui du qui pour cela la fenêtre wichtigen Bedingungen abgefragst. Sobald cela la fenêtre geschlossen wird, wird qui Abbruchbedingung aktiv et cela Programme springt dans qui untergeordnete Boucle des untergeordenten la fenêtre. Anschließend volonté également seulement qui pour cet la fenêtre wichtige Bedingungen abgefragt.
avec cela du aussi alle Bedingugen aller la fenêtre gleichzeitig abfragen peux, doit alle Bedingungen naturellement aussi dans einer Boucle liegen. Allternativ verschiebst du alle Bedingungen dans un Funktion et appelles vous dans chacun individuel Boucle sur.
cela Erste wäre avec Bezug sur sauberen Code qui bessere Solution. |
| | | | |
| | Thomas Freier | Im Prinzip peux il oui x-beliebige la fenêtre sur 28.14 - Multiprozessing avec XProfan ouvrir , Travailler, à gauche liegen laisser et schließen. chez den DBFs devrait cet ensuite vorsichtshalber toujours seulement zum Datenlesen et -Sauver sur @db("Open", #N,S) aktiv son. suis Je ne sûrement, si es beim Multiprozessing sonst trop Problemen venez, si de deux Prozessen puis zurückgegriffen wird. |
| | | | |
| | H.Brill | Peut-être aussi un TabControl quoi pour toi ? là peux on cela doch joli schalten. et on braucht seulement une einzige Ereignis-Boucle. il faut seulement aufpassen, quel Button/Contrôle dans welches la fenêtre est. Hab ici la fois quoi vorbereitet. s'il te plaît korrigiert mich, si quoi faux son sollte :
Déclarer Dlg1&, Dlg2&, Dlg3&, tabctrl&, Reiter&
Déclarer edit1&, edit2&, edit3&, edit4&, edit5&, btn1&, btn2&, btn3&, lb&
Titre de la fenêtre "Mein Fenster"
Fenêtre 800, 600
tabctrl& = Créer("TabCtrl", %HWnd, "Kunden", 5, 10, 730, 550)
' Reiter anlegen
@InsertTab(tabctrl&, 3, "Artikel")
@InsertTab(tabctrl&, 2, "Rechnungen")
Fenêtre Style 1024
' 1. Dialog
Dlg1& = @Créer("Window",tabctrl&,"Kunden Verwaltung",10, 60, 700, 480)
edit1& = @Créer("Edit", Dlg1&, », 10, 10, 120, 25)
edit2& = @Créer("Edit", Dlg1&, », 10, 40, 120, 25)
btn1& = @Créer("Button", Dlg1&, "Kopiere", 10, 80, 60, 25)
lb& = @Créer(ListBox, Dlg1& , 1, 10, 120, 120, 180)
AddStrings(lb&, "Maier")
AddStrings(lb&, "Müller")
AddStrings(lb&, "Schmitt")
' 2. Dialog
Dlg2& = @Créer("Window",tabctrl&,"Artikel Verwaltung",10, 60, 700, 480)
btn2& = @Créer("Button", Dlg2&, "Test2", 10, 10, 60, 25)
edit3& = @Créer("Edit", Dlg2&, », 10, 50, 120, 25)
edit4& = @Créer("Edit", Dlg2&, », 10, 80, 120, 25)
' 3. Dialog
Dlg3& = @Créer("Window", tabctrl&, "Rechnungs Erstellung", 10, 60, 700, 480)
edit5& = @Créer("Edit", Dlg3&, », 10, 10, 240, 25)
btn3& = @Créer("Button", Dlg3&, "Test 3", 10, 50, 80, 25)
ShowWindow(Dlg2&, 0)
ShowWindow(Dlg3&, 0)
SetWindowPos Dlg1& = %WinLeft + 20, %WinTop + 100; 0
Tandis que 1
WaitInput
Reiter& = @GetActiveTab(tabctrl&)
Si @TabChanged(tabctrl&)
'Reiter& = @GetActiveTab(tabctrl&)
Select Reiter&
CaseOf 0
ShowWindow(Dlg1&, 1)
ShowWindow(Dlg2&, 0)
ShowWindow(Dlg3&, 0)
SetWindowPos Dlg1& = %WinLeft + 20, %WinTop + 100; 0
CaseOf 1
ShowWindow(Dlg2&, 1)
ShowWindow(Dlg1&, 0)
ShowWindow(Dlg3&, 0)
SetWindowPos Dlg2& = %WinLeft + 20, %WinTop + 100; 0
CaseOf 2
ShowWindow(Dlg3&, 1)
ShowWindow(Dlg1&, 0)
ShowWindow(Dlg2&, 0)
SetWindowPos Dlg3& = %WinLeft + 20, %WinTop + 100; 0
EndSelect
EndIf
Cas %Key = 2 : Pause
Si @Clicked(btn1&)
'MessageBox("Button dans Kunden Verwaltung geklickt !", "Info", 0)
SetText edit5&, GetString$(lb&, GetCurSel(lb&))
ElseIf @Clicked(btn2&)
MessageBox("Button dans Artikel Verwaltung geklickt !", "Info", 0)
ElseIf @Clicked(btn3&)
MessageBox("Button dans Rechnungs Erstellung geklickt !", "Info", 0)
EndIf
Endwhile
Fin
|
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 29.07.2013 ▲ |
| |
| | Julian Schmidt | Es pouvoir oui im Prinzip absolute keinen Unterschied si qui Controls sur une TabControl ou bien une la fenêtre liegen. cela Wichtige ist, cela alle Bedingungen dans einer Boucle liegen. ou bien per Muliprozessing gleichzeitig abgefragt volonté peut.
je denke de Handling her wären ChildWindows encore cela einfachste. peux du dir oui la fois anschauen. |
| | | | |
| | Thomas Freier | peut-être trifft cet Beispiel cela Gesuchte.
$H windows.ph
$H messages.ph
Utilisateur Messages 16
DEF SysParameterInfo(4) ! "user32","SystemParametersInfoA"
Déclarer WX%,WY%,WL%,WB%
Déclarer item&,x%
Déclarer Win1&,W1Éditer1&,W1Éditer2&,W1Grid1&,W1End&,W1NeuSp&
Déclarer Win2&,W2Éditer1&,W2Éditer2&,W2End&
'Freier Desktopbereich
Déclarer Rect#
Faible Rect#,16
SysParameterInfo(48,0,Rect#,0)
wx%=Long(Rect#,0)
wy%=Long(Rect#,4)
wl%=Long(Rect#,8)
wb%=Long(Rect#,12)
Dispose Rect#
Fenêtre wx%,wy% - wl%,wb%
Windowtitle "Hauptfenster"
Cls ~Getsyscolor(15)
Setdialogfont ~Getstockobject(~Default_gui_font)
PopUp "&Daten"
AppendMenu 100,"&Kunden"
AppendMenu 200,"&Auftrag"
Tandis que 1
Waitinput
Si %UMessage = 16
cas GetActiveWindow()=%hwnd:Pause
Si GetActiveWindow()=Win1&
DestroyWindow(Win1&)
Win1&=0
subclass Win1&,0
setfocus(%hwnd)
ElseIf GetActiveWindow()=Win2&
DestroyWindow(Win2&)
Win2&=0
subclass Win2&,0
setfocus(%hwnd)
EndIf
EndIf
Cas MenuItem(100) AND (Win1&=0): KUNDEN
Cas MenuItem(200) AND (Win2&=0): AUFTRAG
Endwhile
subclass Win1&,0
subclass Win2&,0
Fin
subClassProc
Si SubClassMessage(win1&, ~WM_NOTIFY)
Si clicked(W1End&)
DestroyWindow(Win1&)
Win1&=0
subclass Win1&,0
setfocus(%hwnd)
ElseIf getfocus(W1NeuSp&)
x%=Messagebox("Daten Sauver?","Hinweis",32+4)
cas x%=6:AddStrings(W1Grid1&, Gettext$(W1Éditer1&)+"|"+Gettext$(W1Éditer2&))
setfocus(W1Grid1&)
ElseIf Long(&sLParam,8)=-3' Double-cliquez sur à gauche
item&=Long(&sLParam,12)
Si item&<>-1
Si Win2&>0
Settext W2Éditer1&, Gettext$(W1Grid1&, item&, 0)
Settext W2Éditer2&, Gettext$(W1Grid1&, item&, 1)
endif
EndIf
EndIf
EndIf
Si SubClassMessage(win2&, ~WM_NOTIFY)
Si clicked(W2End&)
DestroyWindow(Win2&)
Win2&=0
subclass Win2&,0
setfocus(%hwnd)
EndIf
EndIf
ENDPROC
Proc KUNDEN
Win1&=Créer("Window",%hwnd,"Kunden",10,10,340,430)
W1Grid1&=Créer("GridBox", Win1&, "Name;0;180;Vorname;0;100", 1, 10, 10, 300, 190)
AddStrings(W1Grid1&, "Meyer|Klaus")
AddStrings(W1Grid1&, "Peter|Peter")
AddStrings(W1Grid1&, "Klein|Fritz")
Créer("Tooltip",%hwnd,W1Grid1&,"in den Auftrag per Doppelklick")
Créer("Text",Win1&,"Name",10,210,80,20)
Créer("Text",Win1&,"Vorname",10,235,80,20)
W1Éditer1&=Créer("EDIT",Win1&,»,100,210,120,20)
W1Éditer2&=Créer("EDIT",Win1&,»,100,235,120,20)
W1NeuSp&=Créer("Button",Win1&,"Eingabe speichern",10,310,120,22)
W1End&=Créer("Button",Win1&,"Schließen",200,310,80,22)
subclass Win1&,1
ENDPROC
Proc AUFTRAG
Win2&=Créer("Window",%hwnd,"Auftrag",510,10,340,430)
W2Éditer1&=Créer("EDIT",Win2&,»,10,50,120,20)
W2Éditer2&=Créer("EDIT",Win2&,»,10,75,120,20)
W2End&=Créer("Button",Win2&,"Schließen",200,310,80,22)
subclass Win2&,1
ENDPROC
|
| | | | |
|
répondreOptions du sujet | 10.027 Views |
Themeninformationencet Thema hat 4 participant: |