Doppeltes Starten von Programmteilen

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Doppeltes Starten von Programmteilen

Beitrag von stevie »

Ich habe einen itemselected bei meinem Browser angegeben.
Dadurch werden Dokumente aus der Datenbank geöffnet.
Wenn ich jetzt einen Doppelklick auf eine Zeile mache,
passiert es ab und zu, dass die Funktion zwei Mal aufgerufen wird.
Sieht aber eben ganz schön blöd aus, wenn das Dokument geöffnet, dann wird gehalten, dann macht man Word zu und es geht nochmal auf.
Wie kann ich das verhindern?
Viele Grüße
Stevie
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16514
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Doppeltes Starten von Programmteilen

Beitrag von Martin Altmann »

Moin Stevie,
indem Du bei Aufruf Deiner Methode zuerst mal :itemselected() NIL zuweist und nach Beenden von Word wieder die Methode.
Dann kann immer nur ein Dokument in Word geäöffnet werden.
Nachteil: Word muß immer geschlossen werden, bevor in Deinem Programm ein neues Dokument geöffnet wird.
Besser: In Deiner itemselected()-Methode in einem CLASS-Array ablegen, welche Dokumente bereits geöffnet sind.
Soll jetzt ein Dokument per Klick geöffnet werden, wird erstmal in dem Array gescannt - ist es schon drin, passiert nix weiter. Ansonsten kommt es dazu und wird in Word geöffnet.
Nach dem Schliessen von Word musst Du das dann wieder aus dem Array entfernen - wie Du das machen willst, kann ich Dir nicht sagen - aber vielleicht kannst Du ja für Word den OnExit-Callback-Slot belegen (oder so ähnlich) und Dir dann dort den aktuellen Dokumentennamen geben lassen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Doppeltes Starten von Programmteilen

Beitrag von stevie »

Martin Altmann hat geschrieben:Moin Stevie,
indem Du bei Aufruf Deiner Methode zuerst mal :itemselected() NIL zuweist und nach Beenden von Word wieder die Methode.
Dann kann immer nur ein Dokument in Word geäöffnet werden.
Nachteil: Word muß immer geschlossen werden, bevor in Deinem Programm ein neues Dokument geöffnet wird.
Besser: In Deiner itemselected()-Methode in einem CLASS-Array ablegen, welche Dokumente bereits geöffnet sind.
Soll jetzt ein Dokument per Klick geöffnet werden, wird erstmal in dem Array gescannt - ist es schon drin, passiert nix weiter. Ansonsten kommt es dazu und wird in Word geöffnet.
Nach dem Schliessen von Word musst Du das dann wieder aus dem Array entfernen - wie Du das machen willst, kann ich Dir nicht sagen - aber vielleicht kannst Du ja für Word den OnExit-Callback-Slot belegen (oder so ähnlich) und Dir dann dort den aktuellen Dokumentennamen geben lassen.

Viele Grüße,
Martin
Das würde zwar auch gehen, aber da grundsätzlich nur ein Dokument offen sein darf, wird der erste Weg wohl besser sein.
Viele Grüße
Stevie
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Doppeltes Starten von Programmteilen

Beitrag von AUGE_OHR »

hi,
stevie hat geschrieben: Ich habe einen itemselected bei meinem Browser angegeben.
Dadurch werden Dokumente aus der Datenbank geöffnet.
Wenn ich jetzt einen Doppelklick auf eine Zeile mache,
passiert es ab und zu, dass die Funktion zwei Mal aufgerufen wird.
dann fange doch :lbDblClick ab ...
oder setzte am Anfang eine Flag IsRunning(.T.) und am Ende zurück.
gruss by OHR
Jimmy
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Doppeltes Starten von Programmteilen

Beitrag von stevie »

AUGE_OHR hat geschrieben:hi,
stevie hat geschrieben: Ich habe einen itemselected bei meinem Browser angegeben.
Dadurch werden Dokumente aus der Datenbank geöffnet.
Wenn ich jetzt einen Doppelklick auf eine Zeile mache,
passiert es ab und zu, dass die Funktion zwei Mal aufgerufen wird.
dann fange doch :lbDblClick ab ...
oder setzte am Anfang eine Flag IsRunning(.T.) und am Ende zurück.
isrunning klappt nicht, läuft trotzdem zweimal. wenn ich in der Methode itemselected auf niel setze und am Ende wieder voll, wirds auch zweimal aufgerufen.
Viele Grüße
Stevie
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Doppeltes Starten von Programmteilen

Beitrag von Tom »

Dann probier's doch mal mit einem oDialog:Disable() gleich als erstes im ItemMarked-Codeblock. Am Ende (oder in der aufgerufenen Funktion) :Enable() nicht vergessen.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16514
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Doppeltes Starten von Programmteilen

Beitrag von Martin Altmann »

Stevie,
auf "voll" darfst Du nur nach dem Beenden von Word setzen :wink:
Nicht nach dem Beenden der Methode...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Doppeltes Starten von Programmteilen

Beitrag von AUGE_OHR »

hi,
stevie hat geschrieben: isrunning klappt nicht, läuft trotzdem zweimal. wenn ich in der Methode itemselected auf niel setze und am Ende wieder voll, wirds auch zweimal aufgerufen.
ich denke wir missverstehen uns.

Code: Alles auswählen

STATIC isRun := .F.
IF isRUN
    RETURN
ELSE
    isRun := .T.
    tu_mal_was_in_word()
    isRun := .F.
ENDIF
es ist absolut unmöglich das er dann 2x tu_mal_was_in_word() ausführt.
gruss by OHR
Jimmy
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Doppeltes Starten von Programmteilen

Beitrag von stevie »

AUGE_OHR hat geschrieben:hi,
stevie hat geschrieben: isrunning klappt nicht, läuft trotzdem zweimal. wenn ich in der Methode itemselected auf niel setze und am Ende wieder voll, wirds auch zweimal aufgerufen.
ich denke wir missverstehen uns.

Code: Alles auswählen

STATIC isRun := .F.
IF isRUN
    RETURN
ELSE
    isRun := .T.
    tu_mal_was_in_word()
    isRun := .F.
ENDIF
es ist absolut unmöglich das er dann 2x tu_mal_was_in_word() ausführt.
ich hatte es als Klassenvariable genau so wie du stehen, nur nich static. Egal ich rufe jetzt beim itemselected vorher noch noch ::oBrowse:disable auf und enable ihn, wenn die öffnen-Methode durch ist, dann is Ruhe mit 2 Mal.
Viele Grüße
Stevie
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Doppeltes Starten von Programmteilen

Beitrag von stevie »

Is zwar blöd, immer erst zu enablen und zu disablen, aber was soll.
Wieder was dazu gelernt.
Vielen Dank für eure Mühe
Viele Grüße
Stevie
Antworten