XbpCrt Multi Thread mit Tabpage ?
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
XbpCrt Multi Thread mit Tabpage ?
hi,
bei alten Cl*pperanwendungen hat man ja oft ein "Menu" ( MenuTo )
aus dem man dann in die "SubMenu" der einzelnen Stammdaten kommt.
nun habe ich es bislang für Hybrid Anwendungen so gelöst, das für jeden
der Stammdaten ein Button als Menu vorhanden ist, von dem dann das
"SubMenu" als Thread im eigenen oCrt "Fenster" gestartet wird.
nun ist es mir beim "umschalten", minimieren/maximieren, zu "umständlich"
und ich denke da nun an 2 Möglichkeiten :
1.) "interner" Taskmanager für die verschiedenen oCrt "Fenster"
2.) die Thread oCrt "Fenster" auf einer Tabpage laufen lassen
Frage : hat jemand sowas schon mal mit oCrt "Fenstern" gemacht ?
Problem : eine "Ausgabe" darf nur im "aktiven" oCrt "Fenster" passieren,
d.h. die anderen Threads (minimiert) sind dann "deaktiviert" (kein timeout)
gruss by OHR
Jimmy
bei alten Cl*pperanwendungen hat man ja oft ein "Menu" ( MenuTo )
aus dem man dann in die "SubMenu" der einzelnen Stammdaten kommt.
nun habe ich es bislang für Hybrid Anwendungen so gelöst, das für jeden
der Stammdaten ein Button als Menu vorhanden ist, von dem dann das
"SubMenu" als Thread im eigenen oCrt "Fenster" gestartet wird.
nun ist es mir beim "umschalten", minimieren/maximieren, zu "umständlich"
und ich denke da nun an 2 Möglichkeiten :
1.) "interner" Taskmanager für die verschiedenen oCrt "Fenster"
2.) die Thread oCrt "Fenster" auf einer Tabpage laufen lassen
Frage : hat jemand sowas schon mal mit oCrt "Fenstern" gemacht ?
Problem : eine "Ausgabe" darf nur im "aktiven" oCrt "Fenster" passieren,
d.h. die anderen Threads (minimiert) sind dann "deaktiviert" (kein timeout)
gruss by OHR
Jimmy
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Fenstergestaltung
Hi Jimmy,
ich mache dies immer mit xbpdialog. Hierbei kannst du ja auch die Fenster sperren und wieder freigeben, und wieder aktivieren mit setappfocus.
ich mache dies immer mit xbpdialog. Hierbei kannst du ja auch die Fenster sperren und wieder freigeben, und wieder aktivieren mit setappfocus.
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fenstergestaltung
hi,
Es fragt sich ob man Tabpage zu "steuern" von Threads nehmen könnte ?
gruss by OHR
Jimmy
p.s. es soll nur SDI werden.
die Tabpage selbst sind kein Problem.Rolf Ramacher hat geschrieben: ich mache dies immer mit xbpdialog. Hierbei kannst du ja auch die Fenster sperren und wieder freigeben, und wieder aktivieren mit setappfocus.
Es fragt sich ob man Tabpage zu "steuern" von Threads nehmen könnte ?
gruss by OHR
Jimmy
p.s. es soll nur SDI werden.
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Fenstergestaltung
hi,
also :
Crt Class mit Signal() (siehe Fordum Thread & Signal)
gruss by OHR
Jimmy
also :
es sieht gut aus ! Der "Trick" an der Sache ist nun die verwendung einerAUGE_OHR hat geschrieben: Es fragt sich ob man Tabpage zu "steuern" von Threads nehmen könnte ?
Crt Class mit Signal() (siehe Fordum Thread & Signal)
gruss by OHR
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
so langsam bekomme ich die Dual-SDI Crt "Fenster" mit Tabpage hin.
Da ja jedes "Fenster" ein Thread ist, hat auch jedes "Fenster" seine
eigene WorkSpaceList(). Nun hab ich die Funktion aus dem Help File
genommen, aber das reicht bei weitem nicht aus sodas ich noch diverse
weiter Informationen absichere. Die Frage ist was man evtl. noch dazu
nehmen sollte was ich "vergessen" habe.
gruss by OHR
Jimmy
so langsam bekomme ich die Dual-SDI Crt "Fenster" mit Tabpage hin.
Da ja jedes "Fenster" ein Thread ist, hat auch jedes "Fenster" seine
eigene WorkSpaceList(). Nun hab ich die Funktion aus dem Help File
genommen, aber das reicht bei weitem nicht aus sodas ich noch diverse
weiter Informationen absichere. Die Frage ist was man evtl. noch dazu
nehmen sollte was ich "vergessen" habe.
Code: Alles auswählen
FUNCTION SaveWorkSpace(nSelect)
LOCAL aSaved := {}
*LOCAL nSelect := Select()
// NEW just for debugging
LOCAL aWSL := WorkSpaceList()
WorkSpaceEval( {|| AAdd( aSaved, SaveWorkArea() ) } )
// NEW my WorkSpaceListClose
WSLclose()
RETURN { aSaved, nSelect }
*********************
FUNCTION SaveWorkArea
LOCAL aWork := {}
* ALTD()
* { ;
* { Select() , {|x| DbSelectArea(x)} }, ;
* { OrdNumber(), {|x| OrdSetFocus(x) } }, ;
* { Recno() , {|x| Dbgoto(x) } } }
IF Select() > 0
AADD(aWork,Select())
AADD(aWork,ALIAS())
AADD(aWork,Recno() )
AADD(aWork,DBRelation(ALIAS()) )
AADD(aWork,DBFilter() )
AADD(aWork,DbInfo(DBO_SHARED))
ELSE
AADD(aWork,0)
AADD(aWork,"")
AADD(aWork,0)
AADD(aWork,0)
AADD(aWork,0)
AADD(aWork,.F.)
ENDIF
IF OrdNumber() > 0
AADD(aWork,OrdNumber())
ELSE
AADD(aWork,0)
ENDIF
AADD(aWork,DbScope(SCOPE_BOTH))
RETURN aWork
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
DbRelation() abspeichern
hi,
in der Msg vorher hatte ich ja die WorkSpaceList() für jeden einzelnen
Thread "abgespeichert". Nun bin ich am Gegenstück und hab ein Problem
mit DbRelation() denn davon könnte ich ja mehrere haben ...
Also erstmal die Frage wie bekomme ich alle DbRelation() denn ich "weiss"
ja nicht wie viele dran hängen sodas ich nicht eine FOR/NEXT benutzen
kann ?
Angenommen ich hätte alle DbRelation(), welche Reihenfolge bei "Restore"
sollte man anwenden ?
Innerhalb der "ersten" FOR/NEXT kann ich es ja nicht "restoren" weil evtl.
die "Child-DBF" noch gar nicht geöffnet ist ... also noch eine "zweite" FOR/
NEXT Schleife ?
gruss by OHR
Jimmy
in der Msg vorher hatte ich ja die WorkSpaceList() für jeden einzelnen
Thread "abgespeichert". Nun bin ich am Gegenstück und hab ein Problem
mit DbRelation() denn davon könnte ich ja mehrere haben ...
Also erstmal die Frage wie bekomme ich alle DbRelation() denn ich "weiss"
ja nicht wie viele dran hängen sodas ich nicht eine FOR/NEXT benutzen
kann ?
Angenommen ich hätte alle DbRelation(), welche Reihenfolge bei "Restore"
sollte man anwenden ?
Code: Alles auswählen
FOR i = 1 TO LEN(aSaveArray)
SELECT (aSel[i})
USE (aDBF[i])
SET INDEX TO _alle_meine_indexe
ORDSETFOCUS(aINDEX[i])
GOTO(aRec[i])
...
IF .NOT. EMPTY(aDbRelation[i] )
was_jetzt_tun()
ENDIF
...
NEXT
die "Child-DBF" noch gar nicht geöffnet ist ... also noch eine "zweite" FOR/
NEXT Schleife ?
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21219
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Jimmy,
ich hoffe, dass ich Dich jetzt richtig verstehe. die Aliase kann man ja ermitteln und darüber kann man dann über (alias(nWert))->(Dbrlist()) in Erfahrung bringen, wohin die Reise geht, also welche DB zu welcher eine Relation bildet und dann auch über welche Verknüpfungen.
Aber das war es wohl nicht, oder? Erschien mir jetzt zu einfach. Aber wer weiß....
ich hoffe, dass ich Dich jetzt richtig verstehe. die Aliase kann man ja ermitteln und darüber kann man dann über (alias(nWert))->(Dbrlist()) in Erfahrung bringen, wohin die Reise geht, also welche DB zu welcher eine Relation bildet und dann auch über welche Verknüpfungen.
Aber das war es wohl nicht, oder? Erschien mir jetzt zu einfach. Aber wer weiß....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15703
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
schneller ist es wenn du den nWert direkt verwendest:Manfred hat geschrieben: die Aliase kann man ja ermitteln und darüber kann man dann über (alias(nWert))->(Dbrlist()) in Erfahrung bringen
Code: Alles auswählen
nWert := select()
...
(nWert)->Feld ...
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21219
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
das ist klar, (mittlerweile) ich wußte jetzt nur nicht, wie ich mich verständlich ausdrücken sollte.
das ist klar, (mittlerweile) ich wußte jetzt nur nicht, wie ich mich verständlich ausdrücken sollte.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12912
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
war schon richtig. Es musste was mit DBR...() sein und so kam
ich nun auf :
damit hab ich dann 2 cString woraus ich dann
machen kann.
damit scheine ich nun mein Ziel, alles aus der WorkSpaceList zu "save"n
und auch "restore"n zu können, ein grosses Stück näher gekommen und
die Thread-Crt Class scheint nun (fast) alles zu machen wie es sollte.
gruss by OHR
Jimmy
manchmal ist die "einfachste" Lösung "fast" die richtige, aber die RichtungManfred hat geschrieben: ich hoffe, dass ich Dich jetzt richtig verstehe. die Aliase kann man ja ermitteln und darüber kann man dann über (alias(nWert))->(Dbrlist()) in Erfahrung bringen, wohin die Reise geht, also welche DB zu welcher eine Relation bildet und dann auch über welche Verknüpfungen.
Aber das war es wohl nicht, oder? Erschien mir jetzt zu einfach. Aber wer weiß....
war schon richtig. Es musste was mit DBR...() sein und so kam
ich nun auf :
Code: Alles auswählen
{ DBRelation(i),ALIAS(DbRSelect(i)) }
Code: Alles auswählen
SET RELATION TO &(cRela) INTO &(cChild) ADDITIVE
damit scheine ich nun mein Ziel, alles aus der WorkSpaceList zu "save"n
und auch "restore"n zu können, ein grosses Stück näher gekommen und
die Thread-Crt Class scheint nun (fast) alles zu machen wie es sollte.
gruss by OHR
Jimmy