Nach Thread einen Focus setzen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Nach Thread einen Focus setzen

Beitrag von Manfred »

Hi,

ich habe einen Hybridmodus, in dem ich in ein Get Feld einen Suchstring eingebe. Dieser Suchstring wird über ein Valid weiterverarbeitet. Dieses Valid ruft einen Thread auf, in dem über Ordwildseek gesucht wird und ein GUI Hinweis erscheint, dass die Suche stattfindet. Gleichzeitig wird ja das Read abgearbeitet und danach wird ein Browser mit GUI aufgemacht, der im "Hintergrund" die gefundenen Werte anzeigt. Wenn jetzt aber die Suche beendet ist, erscheint wieder ein GUI Hinweis, dass das der Fall ist. Wird der OK Button geklickt, schließt sich dieses Hinweisfenster, aber der Focus ist danach nicht im Browser, wo ich ihn haben müßte.

Wie kriege ich nach einem beendeten Thread hin, das ich dem Programm sage, wer jetzt den Focus erhält?

Code: Alles auswählen

#include "q:\include\inkey.ch"
#include "Gra.ch"
#include "dcdialog.ch"
#include "Xbp.ch"
*******************************************************************************
PROCEDURE main()
          LOCAL aVo
          LOCAL getlist := {}
          LOCAL oThread := Thread():new()
          LOCAL oVostamm

          MEMVAR oBild
          MEMVAR oMa
          MEMVAR oMessage
          MEMVAR oPruefen
          MEMVAR oSysPara

          oBild    := bildschirm():new()
          oMessage := nachricht():new()
          oPruefen := pruefen():new()

          oMa      := mitarbeiter():new():initvaria()
          oVostamm := fstamm():new():initvaria()

          oBild:cPrgArt          := "Info-Terminal"
          oBild:cVersion         += "09/14.01.2009"
          oMa:name               := "Info"
          oSysPara:cProgrammName := "Info-Terminal"

          oBild:hauptmenue(.T.,.T.)
          oVostamm:db_oeffnen()
          SETCANCEL(.F.)                                                        // ALT+C abschalten
          DO WHILE .T.
             aVo := {}
             oVostamm:felderleeren()
             @  1, 1 SAY "Darst/Interpr:                     Titel:                                 "
             @  1,15 GET oVostamm:v_darstell PICTURE "@K !XXXXXXXXXXXXXXXXXXX";
                                             WHEN EMPTY(oVostamm:v_titel);
                                             VALID oThread:start("interpret", aVo, oThread, oVostamm)
             @  1,42 GET oVostamm:v_titel    PICTURE "@K !XXXXXXXXXXXXXXXXXXX";
                                             WHEN EMPTY(oVostamm:v_darstell);
                                             VALID oThread:start("titel", aVo, oThread, oVostamm)
             READ
             IF oVostamm:v_titel = "LOGOUT" .OR. oVostamm:v_darstell = "LOGOUT"
                EXIT
             ENDIF
             browser(aVo, IF(! Empty(oVostamm:v_titel),"Titel","Interpret"), IF(! Empty(oVostamm:v_titel),Trim(oVostamm:v_titel),Trim(oVostamm:v_darstell)))
          ENDDO .T.
          AppQuit()
          RETURN
********************************************************************************
FUNCTION browser(aVo, cSuchart, cSuchsatz)
         LOCAL getlist := {}
         LOCAL GetOptions
         LOCAL oBrowse := NIL
         LOCAL oDialog := NIL

         @ 70, 1 DCBROWSE oBrowse;
                             DATA aVo;
                             SIZE 1000,600;
                            PIXEL;
                       CURSORMODE XBPBRW_CURSOR_ROW;
                      NOSOFTTRACK;
                           PARENT oDialog;
                      AUTOREFRESH 111
         DCBROWSECOL ELEMENT 1 WIDTH 300 HEADER "Interpret" PARENT oBrowse PIXEL
         DCBROWSECOL ELEMENT 2 WIDTH 300 HEADER "Titel"     PARENT oBrowse PIXEL
         DCBROWSECOL ELEMENT 3 WIDTH 200 HEADER "Ort"       PARENT oBrowse PIXEL
         DCBROWSECOL ELEMENT 4 WIDTH  50 HEADER "Platz"     PARENT oBrowse PIXEL ALIGN XBPALIGN_RIGHT

         DCGETOPTIONS HILITEGETS GRA_CLR_CYAN;
                           PIXEL;
                      SAYOPTIONS XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT;
                     NOMINBUTTON;
                     NOMAXBUTTON;
                      AUTORESIZE

         DCREAD GUI;
              TITLE cSuchArt + " (" + cSuchSatz + ")";
            OPTIONS GetOptions;
             PARENT oDialog;
              OWNER SetAppWindow();
                FIT
         RETURN(.T.)
********************************************************************************
FUNCTION titel(aVo,oThread, oVostamm)
         LOCAL aDlgSize     := {300,100}
         LOCAL cIndexAnfang
         LOCAL cIndexEnde
         LOCAL oAblauf
         LOCAL oDialog
         LOCAL oHinweis
         LOCAL oVo2        := kassette():new():initvaria()
         LOCAL oVostamm2   := fstamm():new():initvaria()

         MEMVAR oGenre
         MEMVAR oHersteller
         MEMVAR oMessage
         MEMVAR oSysteme

         oMessage    := nachricht():new()
         oGenre      := genre():new():initvaria()
         oHersteller := hersteller():new():initvaria()
         oSysteme    := systeme():new():initvaria()

         IF Empty(oVostamm:v_titel)
            oThread:quit()
            RETURN(.T.)
         ENDIF
         oGenre:db_oeffnen()
         oHersteller:db_oeffnen()
         oSysteme:db_oeffnen()
         oVostamm2:db_oeffnen("titel")
         oDialog  := DialogFenster():new(AppDesktop(),SetAppWindow(),,aDlgSize,,,.F.)
         oHinweis := feldtexte():new(oDialog,,{5,40},{200,20})
         oHinweis:caption := "Daten werden erzeugt, bitte Geduld...."
         oAblauf  := feldtexte():new(oDialog,,{5,10},{100,20})
         oDialog:create()
         oHinweis:create()
         oAblauf:create()
         oVo2:db_oeffnen()
         oVostamm2:db_oeffnen("titel")
         DO WHILE .T.
            IF "*" $ oVostamm:v_titel .OR. "?" $ oVostamm:v_titel               // Orwilsseek ist angesagt
               oVostamm:v_titel := StrTran(Trim(oVostamm:v_titel)," ","?")
               (oVostamm2:nArea)->(OrdWildSeek(Upper(oVostamm:v_titel)))
               DO WHILE (oVostamm2:nArea)->(Found())
                  IF oVo2:satzsuchen(Str((oVostamm2:nArea)->id,8,0),,"idvostamm",,,,.T.,.F.,.F.)
                     oVostamm2:fuehreDbVerbindungen("titelsuchen")
                     AAdd(aVo,{;
                               (oVostamm2:nArea)->v_darstell,;
                               (oVostamm2:nArea)->v_titel,;
                               (oGenre:nArea)->bez,;
                               (oVo2:nArea)->lagernr;
                              })
                     oAblauf:setcaption(Transform(Len(aVo),"9999"))
                  ENDIF
                 (oVostamm2:nArea)->(OrdWildSeek())
               ENDDO
               EXIT
            ELSE                                                                // es wurde definitiv nach einem Namen gesucht
               cIndexAnfang := Upper(oVostamm:v_titel)                          // Anfangsbuchstaben sichern für den ScopeAnfang
               cIndexEnde   := Trim(cIndexAnfang) + "ZZZZZZZZZZ"                      // für Scopende
               oVostamm2:satzsuchen(oVostamm2:indexOhneArtikel(Upper(oVostamm:v_titel)),.T.,"titel",,,,.T.,,.F.)
               (oVostamm2:nArea)->(Dbsetscope(SCOPE_TOP,cIndexAnfang))
               (oVostamm2:nArea)->(Dbsetscope(SCOPE_BOTTOM,cIndexEnde))
               IF (oVostamm2:nArea)->(Eof())
                  IF oMessage:anzeigen("Es wurde kein passender Eintrag gefunden. Soll eine ungefähre Suche probiert werden?",.T.,"J")
                     (oVostamm2:nArea)->(DbClearScope())
                     oVostamm:v_titel := "*" + Trim(oVostamm:v_titel) + "*"
                     LOOP
                  ENDIF
                  EXIT
               ENDIF
               DO WHILE ! (oVostamm2:nArea)->(Eof())
                  IF oVo2:satzsuchen(Str((oVostamm2:nArea)->id,8,0),,"idvostamm",,,,.T.,,.F.)
                     oVostamm2:fuehreDbVerbindungen("titelsuchen")
                     AAdd(aVo,{;
                               (oVostamm2:nArea)->v_darstell,;
                               (oVostamm2:nArea)->v_titel,;
                               (oGenre:nArea)->bez,;
                               (oVo2:nArea)->lagernr;
                              })
                     oAblauf:setcaption(Transform(Len(aVo),"9999"))
                  ENDIF
                  (oVostamm2:nArea)->(DbSkip())
               ENDDO
               (oVostamm2:nArea)->(DbClearScope())
            ENDIF
            EXIT
         ENDDO .T.
         oGenre:schliesse_datenbank()
         oHersteller:schliesse_datenbank()
         oSysteme:schliesse_datenbank()
         oVostamm2:schliesse_datenbank()
         oDialog:destroy()
         oMessage:anzeigen("Suchvorgang beendet")
         oThread:quit()
         RETURN .T.
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!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Nach Thread einen Focus setzen

Beitrag von Jan »

Manfred,

da ich ja auch massiv mit Threads arbeite gehe ich den Weg, daß ich in jedem Dialog hinterlege, welches XBPart gerade den Focus hat. Und wenn der Dialog nach beenden eines anderen Threads (und damit auch eines anderen Dialoges) den Fokus erhält, dann wird der automatisch auf den hinterlegten XBPart weitergeleitet.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Nach Thread einen Focus setzen

Beitrag von Manfred »

Hi Jan,

wie ich das verstehe, ist das so:

Der Cursor steht im GET Feld. Nach dem Return, wird das Valid ausgeführt und irgendwie zum gleichen Zeitpunkt oder kurz später der Browser. Also müßte zu dem Zeitpunkt das Get Feld den Fokus habe. Da will ich aber nicht wieder hin.
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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Nach Thread einen Focus setzen

Beitrag von AUGE_OHR »

Hi,
Manfred hat geschrieben: Wie kriege ich nach einem beendeten Thread hin, das ich dem Programm sage, wer jetzt den Focus erhält?

Code: Alles auswählen

    VALID oThread:start("interpret", aVo, oThread, oVostamm)
interessant wie du einen Thread startest ... und kann man vom Thread in das "Main" clicken ?

in einer GET Liste bekommt eigentlich das "nächste" GET den Focus.
also 1st GET -> Browser -> 2nd GET ?

wenn ja würde ich :
1.) nach dem VALID würde ich eine FUNCTION aufrufen wegen .T. / .F.
2.) übergebe als Parameter die GETLIST() und die "Variable" nach dem GET für die Position
(getactive oder activeget oder get:active ... wie war das noch ...)

3.) die Frage war ob du es zulässt das er in das "Main" Fenster clicken darf ? was macht dann
dein Thread ? oder willst du den User "im" Thread "festhalten" so wie eine modale Hinweis Box ?

... und geht sowas nicht mit Express++ ... ? ( VALID EVAL(bBlock) ? )
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Nach Thread einen Focus setzen

Beitrag von Manfred »

Hi,

die Forderung ist eigentlich folgende:

Das ist ein Kundeninformationsterminal und da ist eine Maussteuerung unerwünscht. Wenn nun der Browser die erzeugten Werte anzeigt, dann kann es bis zur 1.Anzeige etwas dauern. Das ist natürlich der Moment in dem der User gerne versucht abzubrechen, weil er denkt: Da passiert ja nichts. In diesem Fall wird zwar der Browser beendet, aber der Thread läuft im Hintergrund weiter. (es gibt übrigens auch Murks, wenn man in den Browser klickt. Sprich, der wird aktiviert, aber der Hinweis verschwindet und dann scheint wohl nichts mehr richtig zu klappen)

Dann müßte ich höchstens den Thread auch abbrechen. Aber es soll ja so sein, dass der User erfährt, das was passiert (es läuft ja noch ein Zähler) und nicht gleich abgebrochen werden soll.

Ins Main kann man nicht klicken nur in den Browser.

Das mit der Funktion nach dem Valid hatte ich schon durchdacht. Ich nehme mal an, Du meinst das VALID mit einem Codeblock und dann als weiteren Parameter die Funktion? Hm, mich verwirrt es ein wenig, dass der Browser schon läuft, obwohl ich ja eigentlich in dem Valid bin, was noch keine Rückmeldung gegeben hat, oder irre ich mich? Das nächste Get Feld wird gesperrt, weil das andere einen Inhalt hat. Nach beiden Kriterien gleichzeitig suchen bringt ja nichts.

Der User soll im Thread festgehalten werden. Oder hat jemand eine bessere Idee für diese Sache? Eben weil es sonst unkontrolliert wird. Ein Datensammeln ohne Browsen bringt ja nichts.

Ich bin mit express++ noch nicht so weit, als dass ich es beurteilen könnte, ob es so geht wie Du vorschlägst. Es sind hier alles noch die ersten Gehversuche
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!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Nach Thread einen Focus setzen

Beitrag von Jan »

Hallo Manfred,

wie immer verwirrst Du mich. und ich bin mir überhaupt nicht mehr sicher, was Du eigentlich möchtest 8) .

Also wenn Du dem Bediener einfach nur sagen möchtest: "Du sichst zwar nicht, das da was passiert, aber da passiert was, nämlich Daten für Deine Liste zusammenstellen", warum machst Du dann nicht einfach einen Dialog auf, lässt da einen Laufbalken rüberlaufen, schreibst dazu: "Daten werden zusammengestellt", und das wars dann? Und wenn die Sache fertig ist, dann machst Du wieder den Browse an.

Oder Du machst das so wie Hannes das beschrieben hat: Die Datensätze, die in den sichbaren Browse passen, sofort anzeigen, und den Rest im Hintergrund sammeln.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Nach Thread einen Focus setzen

Beitrag von Manfred »

Jan,

schau Dir mal den Code oben an. Watt passiert denn da? Da stelle wa uns ma janz dumm. (ich weiß ja, wie schwer es ist Anderleute Code zu lesen)

Also, genau das, was Du gerade gesagt hast, tue ich doch.
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!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Nach Thread einen Focus setzen

Beitrag von Jan »

Manfred,

sorry, aber ich werde den Code nicht lesen. Weil ich kein Express++ versteh. Ist für mich Fremdsprache.

Mir ging es ja auch nur ums Prinzip, wie man das machen könnte, und darum, ob ich Dich jetzt ganz oder teilweise oder garnicht verstanden habe. Und wie Du mir bestätigst, habe ich Dich ganz und gar verstanden. Und trotzdem wieder dran vorbeigeredet :cry:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Nach Thread einen Focus setzen

Beitrag von Manfred »

aber macht doch Spass, oder? :blob8:
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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Nach Thread einen Focus setzen

Beitrag von Tom »

Hallo, Manfred.

"Nach Thread" ist genaugenommen schon die falsche Fragestellung. Ein Thread läuft parallel, und weitgehend völlig unabhängig davon, was irgendwo anders passiert. Wenn Du aber möchtest, dass ein Thread den Fokus eines anderen Programmteils beeinflusst, musst Du dem Thread das Objekt bekanntmachen, auf das er den Fokus setzen soll - entweder als Startparameter (was nicht geht, da Dein Browser noch nicht existiert, wenn der Thread gestartet wird), oder dadurch, dass das Browse-Object public ist. In diesem Fall ginge es durch ein einfaches "SetAppFocus(oBrowse)" nach "oMessage:anzeigen("Suchvorgang beendet")". Um zu verhindern, dass dies zu einem Laufzeitfehler führt, weil das Browse noch nicht existiert, könnte man es auch so machen:

Code: Alles auswählen

SetAppFocus(IF(Valtype(oBrowse)="O",oBrowse,oMessage)
(Vorausgesetzt, ich habe Deinen Code auch nur ansatzweise richtig verstanden. :wink: )
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Nach Thread einen Focus setzen

Beitrag von Manfred »

Hi Tom,

jein. Es ist ja nach dem Thread. Aber jetzt bin ich wieder vollkommen strubbelig. An allen Ecken und Kanten hört und liest man hier, das man keine PUBLIC und PRIVATE verwenden soll. Jetzt mache ich es so und iss auch nicht richtig. Aber das was Du sagst kam mir auch in den Kopf, aber das oBrowse ist halt local. Ich wollte anfangs erst das Valid mit einem Codeblock versehen und dann nach dem Threadaufruf das oBrowse aktivieren. Aber das klappt ja aus besagtem "Local" Grund nicht.
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!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Nach Thread einen Focus setzen

Beitrag von Jan »

Manfred,

um ehrlich zu sein: In dem von mir oben beschriebenen Fall arbeite ich auch mit einer PUBLIC (Schande über mein Haupt). Aber wo ist denn das Problem, in Deinen Hauptdialog einzubauen, daß wenn der den Fokus erhält, der Fokus automatisch auf den Browse gesetzt wird.

So ungefähr

Code: Alles auswählen

oDlg:setDisplayFocus := {| uNIL1, uNIL2, self | SetAppFocus(oBrowse) } 
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Nach Thread einen Focus setzen

Beitrag von Tom »

Hallo, Manfred.

Diese Empfehlung, Objekte lokal zu definieren, ist eine Soll-Regelung, kein Muss. Es kann durchaus Sinn machen, Objekte in PRIVATES oder sogar PUBLICS abzulegen. Man muss dann nur darauf achten, sie auch zu zerstören bzw. zu nilen (in Deiner Browse-Prozedur) - und in Funktionen, die diese Objekte referenzieren, muss man prüfen, ob sie derzeit wirklich existieren (ValType()). Jedenfalls geht nichts irgendwie kaputt, wenn man das tut, es ist nur wichtig, sorgfältig damit umzugehen. Anders kriegst Du das Browse-Objekt m.E. nicht mit einfachen Mitteln zum Fokussetzen in die Suchfunktion. Theoretisch gäbe es auch noch andere Lösungen (z.B. das Setzen des Fokus im Handler Deiner Browse-Funktion abhängig von einer STATIC/PUBLIC-Variablen, die von "titel" gesetzt wird), aber die sind komplizierter.

Ich habe z.B. ein PUBLIC-Textstatic in meinem Hauptdialog, das immer den gewählten Drucker anzeigt. Da in tausenden Dialogen der Drucker ausgewählt werden kann, habe ich darauf verzichtet, dieses Objekt als Parameter an alle möglichen Prozeduren zu übergeben (was ich tun müsste, wäre es local). Das macht insbesondere an dieser Stelle überhaupt nichts aus, da erstens die Objektreferenz eindeutig ist und es zweitens im Hauptdialog steht, also erst mit Beendigung des Programmes zerstört werden muss. Was tatsächlich immer geschieht. 8)
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Nach Thread einen Focus setzen

Beitrag von Tom »

@Jan: Das funktioniert aber nur, wenn der Dialog den Fokus bekommt - und auch das ruft das gleiche Problem hervor wie das Fokussetzen auf das Browse. :wink:
Herzlich,
Tom
Antworten