Foro | | | | holmol93 | ¡Hola miteinander
Tiempo otra vez una muy eigensinnige Cuestión... oO Como es posible, en un Programa mehrere Ventana/Dialoge gleichzeitig en el Fokus a haben en zB con el Dialogfenstern, el en el Hintergrund mentira, auch Eingaben hacer a puede y no zuerst siempre el jeweils obere schliessen tener?
Ejemplo wäre zB, dass uno el Artikelverwaltung y una Auftragsfenster offen ha y beiden trabajo kann... Also cualquier viele Ventana offen ha y todos Eingaben entgegen nehmen puede...
Keine Idea, como yo genau beschreiben kann... Posesiones en el Anhang veces mein derzeitiges Spassprojekt angehängt, con allen Datenbankfiles, el Ver código fuente y uno vorkompilierten Exe para Testen... Tal vez puede ser lo entonces mejor vorstellen... Momentan funktioniert siempre sólo el Ventana, welches en el Vordergrund es...
Testaccounts:
PW: 3333 - Benutzer con muy wenigen Rechten PW: 98553 - Mein Account con así bastante allen Rechten. El puede ser variabel zuteilen übers MitarbeiterMaster.
Sombrero todavía bastante viele Bugs, zeigt mein Problema aber bastante bien... Gruess, Danny |
| | | | |
| | Julian Schmidt | Usted könntest mittels WindowFromPoint el Handel bajo ratón ermitteln. Und todos Tasteneingaben a el Ventana weiterleiten.
Hier una bastante primitives Ejemplo.
Def @GetParent(1) !"User32","GetParent"
CLS
Declarar hhdl&
Crear("Button",%hwnd,"test",10,10,200,30)
Mientras que 1
WaitScan
hhdl&=HandleHover()
If (GetParent(hhdl&)=%hwnd) or (hhdl&=%hwnd)
If %ScanKey=8
Settext hhdl&,Mid$(Gettext$(hhdl&),1,Len(Gettext$(hhdl&))-1)
Más
Settext hhdl&,Gettext$(hhdl&)+Inkey$()
EndIf
Endif
EndWhile
Proc HandleHover
Declarar mpos#
Dim mpos#,8
Externo("user32","GetCursorPos",mpos#)
Var hdl&=Externo("USER32","WindowFromPoint",long(mpos#,0),long(mpos#,4))
Disponer mpos#
Volver hdl&
ENDPROC
|
| | | | |
| | Julian Schmidt | Hab veces deinen Ver código fuente angeschaut.
Mir es aufgefallen el du en el Procedur "accessrights" 45 durchnummerierte Variables para deine Rechterverwaltung verwendest. Leichter wäre hier el Verwendung uno Arrays.
|
| | | | |
| | holmol93 | Heyhoo
Wegen deiner ersten Antwort: Yo muss me el Ver código fuente veces genau anschauen, en el Moment verstehe Yo como sólo Bahnhof hihi Mi Programmierkenntnisse son todavía bastante beschränkt, antes allem si en systemnahe Características va... Muss mich veces por el Befehlsregister durchwühlen, qué jede Anweisung su genau bewirkt
Zu el Rechtezuteilung:
Hehe, como haben wirs otra vez ;) Yo wusste a eben no una vez, qué Arrays son, deshalb tener Yo así más geholfen, como me damals en el Sinn gekommen es Aber Sé que, dass algunos Características todavía no gerade sinnvoll, geschweige porque performant umgesetzt son... Bis dahin se todavía einiges Wasser encima el Rhein ir ;)
Im Moment möchte Yo zuerst una vez el Mehrfensterbetrieb en el Griff bekommen... porque sin Es el todo Software muy mühsam a bedienen^^ (Damit uno en el Auftragsübersicht ebenfalls una Información general encima todos Artikel einblenden kann, sin todos Ventana zuerst a schliessen, Yo me a ahora con un Hotkey beholfen (F1) , el una pequeña Diálogo con los allen Artikeln einblendet)
Greetz,
Danny |
| | | | |
| | Julian Schmidt | Vieleicht kannst du veces una minimalistisches Ejemplo puesto.Was aufzeigt como dein Fensterbetrieb gerade aussieht. Und anschließend beschreiben como du dir el Mehrfensterbetrieb vorstellst.
Yo glaube hier keiner Lust una Tausendzeilen-Code durchzusuchen. Und me es auch todavía no klar qué du eig willst. |
| | | | |
| | holmol93 | Ah also:
Yo beziehe mich esta siempre en unser Access basierendes Datenbanksystem en el Geschäft. Puedo así viele Formulare offen haben, Yo voluntad, sobald Yo de una en el otro Ventana wechsle, kann Yo Eingaben hacer.
En me ists sí ahora grade así: Usted willst una Auftrag suchen. Also gehtst du zB en el Kundendaten, wählst como una Kunden de. El Kundendetails abierto se. Von como klickst du en una Auftrag. Der Auftrag öffnet se. Jetzt haben wir 3 Ventana offen. Puedo sin embargo, sin zuerst todos "übergeordneten" en el Reihenfolge a schliessen, no simplemente así algo en el Kundenübersicht hacer. Klicken va ya, sin embargo reagiert nichts, solang como el Auftragsfenster aktiv es.
Yo habe como ya rumprobiert con el verschiedenen Fensterstilen, como Yo gemeint habe, lo liegt al Dialogfensterstil. Aber si el así wäre, podría Yo sí en el %HWND trotzdem Eingaben vornehmen, qué sin embargo auch no posible es
Gruess, Danny |
| | | | |
| | Julian Schmidt | Yo gehe su de el du para cada Ventana una Bucle hast, en el du el para el Ventana wichtigen Bedingungen abgefragst. Sobald el Ventana geschlossen se, se el Abbruchbedingung aktiv y el Programa springt en el untergeordnete Bucle des untergeordenten Ventana. Anschließend voluntad ebenfalls sólo el para dieses Ventana wichtige Bedingungen abgefragt.
Damit du auch todos Bedingugen aller Ventana gleichzeitig abfragen kannst, necesario todos Bedingungen natürlich auch en uno Bucle mentira. Allternativ verschiebst du todos Bedingungen en un Función y rufst ellos en cada individual Bucle en.
Das Erste wäre con Bezug en sauberen Code el bessere Solución. |
| | | | |
| | Thomas Freier | Im Principio kann él sí x-beliebige Ventana encima 28.14 - Multiprozessing con XProfan abierto , bearbeiten, links mentira dejar y schließen. En el DBFs debería esta entonces vorsichtshalber siempre sólo para Datenlesen y -speichern encima @db("Open", #N,S) aktiv ser. Bin No sicher, si beim Multiprozessing sonst a Problemen kommt, si de zwei Prozessen darauf zurückgegriffen se. |
| | | | |
| | H.Brill | Tal vez auch una TabControl qué para dich ? Como puede ser el doch schön schalten. Und uno braucht sólo una einzige Ereignis-Bucle. Man muß sólo aufpassen, welcher Button/Control en welches Ventana gehört. Hab hier algo vorbereitet. Bitte korrigiert mich, si qué falso ser debería :
Declarar Dlg1&, Dlg2&, Dlg3&, tabctrl&, Reiter&
Declarar edit1&, edit2&, edit3&, edit4&, edit5&, btn1&, btn2&, btn3&, lb&
Título de la ventana "Mein Fenster"
Ventana 800, 600
tabctrl& = Crear("TabCtrl", %HWnd, "Kunden", 5, 10, 730, 550)
' Reiter invertir
@InsertTab(tabctrl&, 3, "Artikel")
@InsertTab(tabctrl&, 2, "Rechnungen")
Ventana de Estilo 1024
' 1. Diálogo
Dlg1& = @Crear("Window",tabctrl&,"Kunden Verwaltung",10, 60, 700, 480)
edit1& = @Crear("Edit", Dlg1&, "", 10, 10, 120, 25)
edit2& = @Crear("Edit", Dlg1&, "", 10, 40, 120, 25)
btn1& = @Crear("Button", Dlg1&, "Kopiere", 10, 80, 60, 25)
lb& = @Crear("ListBox", Dlg1& , 1, 10, 120, 120, 180)
AddStrings(lb&, "Maier")
AddStrings(lb&, "Müller")
AddStrings(lb&, "Schmitt")
' 2. Diálogo
Dlg2& = @Crear("Window",tabctrl&,"Artikel Verwaltung",10, 60, 700, 480)
btn2& = @Crear("Button", Dlg2&, "Test2", 10, 10, 60, 25)
edit3& = @Crear("Edit", Dlg2&, "", 10, 50, 120, 25)
edit4& = @Crear("Edit", Dlg2&, "", 10, 80, 120, 25)
' 3. Diálogo
Dlg3& = @Crear("Window", tabctrl&, "Rechnungs Erstellung", 10, 60, 700, 480)
edit5& = @Crear("Edit", Dlg3&, "", 10, 10, 240, 25)
btn3& = @Crear("Button", Dlg3&, "Test 3", 10, 50, 80, 25)
ShowWindow(Dlg2&, 0)
ShowWindow(Dlg3&, 0)
SetWindowPos Dlg1& = %WinLeft + 20, %WinTop + 100; 0
Mientras que 1
WaitInput
Reiter& = @GetActiveTab(tabctrl&)
If @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
Case %Key = 2 : Romper
If @Clicked(btn1&)
'MessageBox("Button en Kunden Verwaltung geklickt !", "Info", 0)
SetText edit5&, GetString$(lb&, GetCurSel(lb&))
ElseIf @Clicked(btn2&)
MessageBox("Button en Artikel Verwaltung geklickt !", "Info", 0)
ElseIf @Clicked(btn3&)
MessageBox("Button en Rechnungs Erstellung geklickt !", "Info", 0)
EndIf
EndWhile
End
|
| | | 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 | Lo macht sí en el Principio absolute no hay diferencia si el Controls en una TabControl oder una Ventana mentira. Das Wichtige es, el todos Bedingungen en uno Bucle mentira. Oder por Muliprozessing gleichzeitig abgefragt voluntad puede.
Yo denke de Handling her wären ChildWindows todavía el einfachste. ¿Puede du dir sí veces anschauen. |
| | | | |
| | Thomas Freier | Tal vez trifft dieses Ejemplo el Gesuchte.
$H windows.ph
$H messages.ph
Mensajes del usuario 16
DEF SysParameterInfo(4) ! "user32","SystemParametersInfoA"
Declarar WX%,WY%,WL%,WB%
Declarar item&,x%
Declarar Win1&,W1Editar1&,W1Editar2&,W1Grid1&,W1End&,W1NeuSp&
Declarar Win2&,W2Editar1&,W2Editar2&,W2End&
'Freier Desktopbereich
Declarar Rect#
Dim Rect#,16
SysParameterInfo(48,0,Rect#,0)
wx%=Largo(Rect#,0)
wy%=Largo(Rect#,4)
wl%=Largo(Rect#,8)
wb%=Largo(Rect#,12)
Disponer Rect#
Ventana wx%,wy% - wl%,wb%
Windowtitle "Hauptfenster"
Cls ~Getsyscolor(15)
Setdialogfont ~Getstockobject(~Default_gui_font)
PopUp "&Daten"
AppendMenu 100,"&Kunden"
AppendMenu 200,"&Auftrag"
Mientras que 1
Waitinput
If %UMessage = 16
caso GetActiveWindow()=%hwnd:Romper
If 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
Case MenuItem(100) AND (Win1&=0): KUNDEN
Case MenuItem(200) AND (Win2&=0): AUFTRAG
Endwhile
subclass Win1&,0
subclass Win2&,0
End
subClassProc
If SubClassMessage(win1&, ~WM_NOTIFY)
If clicked(W1End&)
DestroyWindow(Win1&)
Win1&=0
subclass Win1&,0
setfocus(%hwnd)
ElseIf getfocus(W1NeuSp&)
x%=Messagebox("Daten speichern?","Hinweis",32+4)
caso x%=6:AddStrings(W1Grid1&, Gettext$(W1Editar1&)+"|"+Gettext$(W1Editar2&))
setfocus(W1Grid1&)
ElseIf Largo(&sLParam,8)=-3' Haga doble clic en links
item&=Largo(&sLParam,12)
If item&<>-1
If Win2&>0
Settext W2Editar1&, Gettext$(W1Grid1&, item&, 0)
Settext W2Editar2&, Gettext$(W1Grid1&, item&, 1)
endif
EndIf
EndIf
EndIf
If SubClassMessage(win2&, ~WM_NOTIFY)
If clicked(W2End&)
DestroyWindow(Win2&)
Win2&=0
subclass Win2&,0
setfocus(%hwnd)
EndIf
EndIf
ENDPROC
Proc KUNDEN
Win1&=Crear("Window",%hwnd,"Kunden",10,10,340,430)
W1Grid1&=Crear("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")
Crear("Tooltip",%hwnd,W1Grid1&,"in el Auftrag por Doppelklick")
Crear("Text",Win1&,"Name",10,210,80,20)
Crear("Text",Win1&,"Vorname",10,235,80,20)
W1Editar1&=Crear("EDIT",Win1&,"",100,210,120,20)
W1Editar2&=Crear("EDIT",Win1&,"",100,235,120,20)
W1NeuSp&=Crear("Button",Win1&,"Eingabe speichern",10,310,120,22)
W1End&=Crear("Button",Win1&,"Schließen",200,310,80,22)
subclass Win1&,1
ENDPROC
Proc AUFTRAG
Win2&=Crear("Window",%hwnd,"Auftrag",510,10,340,430)
W2Editar1&=Crear("EDIT",Win2&,"",10,50,120,20)
W2Editar2&=Crear("EDIT",Win2&,"",10,75,120,20)
W2End&=Crear("Button",Win2&,"Schließen",200,310,80,22)
subclass Win2&,1
ENDPROC
|
| | | | |
|
RespuestaTema opciones | 10.127 Views |
ThemeninformationenDieses Thema ha 4 subscriber: |