Dialoge - Verhalten nach dem Beenden

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Steffen_dcw
Beiträge: 5
Registriert: Di, 25.04.2017 13:51

Dialoge - Verhalten nach dem Beenden

Beitrag von Steffen_dcw »

Hallo,
ich habe einen Dialog erstellt, um ein Tabellenblatt in Calc strukturiert auszufüllen. Der Dialog wird mit "Dialog.execute() geöffnet und mit anderer Sub nach verschiedenen Prüfungen mittels "Dialog.endexecute()" wieder geschlossen. Soweit so gut. Nun ist das Problem aufgetreten, das nach dem Schliessen des Dialogs der Focus nicht wieder zum Tabellenblatt zurückgegeben wird sondern quasi in der Luft hängt. Ich muß also zunächst mal auf eine beliebige Zelle klicken, bevor ich zum Beispiel einen Button drücken oder die Laufleisten klicken kann. Klicke ich irgendwo außerhalb des Tabellenblattes, hüpft der Zellzeiger sonstwo hin.
Ich habe bereits versucht, per Makro den Zellzeiger zu verschieben oder ein anderes Tabellenblatt auszuwählen. Das passiert auch, daß Problem bleibt aber bestehen.
Wie bekomme ich den Focus nach "Dialog.endexecute()" wieder auf das Tabellenblatt?
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Stephan »

Wie bekomme ich den Focus nach "Dialog.endexecute()" wieder auf das Tabellenblatt?
Indem Du per Makro, nach Ausführen von "Dialog.endexecute()", eine Zelle markierst?

http://www.dannenhoefer.de/faqstarbasic ... Zelle.html


Gruß
Stephan
Steffen_dcw
Beiträge: 5
Registriert: Di, 25.04.2017 13:51

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Steffen_dcw »

Hallo Stephan,
genau das funktioniert eben nicht, was aber nicht auf den ersten Blick auffällt, da sich der Zellzeiger ja korrekt bewegt. Klicke ich dann aber unmittbar auf die Scrollbalken der Anwendung, dann wird nicht gescrollt, sondern der Zellzeiger springt unkontrolliert nach rechts bzw. unten. Ich kann auch nicht im Makrofenster schreiben. Wenn ich dann händisch eine Zelle anklicke, klappt alles wieder.
Das Ganze kann natürlich auch ein Bug von Openoffice für Windows sein, was ich aber nicht verifizieren kann.
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von F3K Total »

Hi,
ich kann das so nicht nachvollziehen, habe allerdings den Dialog nicht mit .endexecute beendet, sondern mit einer Schaltfläche, Aktion OK.
Probiere mal die angehängte Beispieldatei, läuft unter Windows 7 mit AOO 4.1.3 problemlos.
Gruß R
Dateianhänge
Dialog.ods
(11.68 KiB) 193-mal heruntergeladen
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Stephan »

Steffen_dcw hat geschrieben: Di, 25.04.2017 17:59 Hallo Stephan,
genau das funktioniert eben nicht, was aber nicht auf den ersten Blick auffällt, da sich der Zellzeiger ja korrekt bewegt. Klicke ich dann aber unmittbar auf die Scrollbalken der Anwendung, dann wird nicht gescrollt, sondern der Zellzeiger springt unkontrolliert nach rechts bzw. unten. Ich kann auch nicht im Makrofenster schreiben. Wenn ich dann händisch eine Zelle anklicke, klappt alles wieder.
Das Ganze kann natürlich auch ein Bug von Openoffice für Windows sein, was ich aber nicht verifizieren kann.
Wie schon "F3K Total" schreibt, ist dieses Problem nicht ohne Weiteres nachvollziehbar. Wenn es bei Dir reproduzierbar auftritt kannst Du uns nur Dein konkretes Makro und die zu bearbeitende Datei, sowie Dein genaues Vorgehen, sowie genaue Programmversion posten in der Hoffnung das man es nachstellen kann, nur dann kann man versuchen der Ursache auf die Spur zu kommen.

z.B. kann das Makro:
http://www.dannenhoefer.de/faqstarbasic ... Zelle.html

deshalb versagen, weil im Verlauf der Schritte die Dein Makro vorher mit der Datei ausführt das ThisComponent-Objekt wechselt und das Makro dadurch das falsche Objekt anspricht. Du kannst das orientierend testen indem Du z.B. nach:

Code: Alles auswählen

myDoc = thisComponent
die Zeile:

Code: Alles auswählen

Msgbox myDoc.title
dabei muss dann der zum Dokument passende Titel angezeigt werden, wird der Titel eines anderen Fensters angezeigt belegt das das Du das falsche Objekt hast. Abhilfe lässt sich schaffen indem Du ganz am Anfang Deines Makros das Dokumentobjekt in einer global deklarierten Variable speicherst und am Ende Deines Makros den Zugriff auf die Zelle über diese Variable machst.
Also am Anfang z.B.:

Code: Alles auswählen

Global tc As Object

Sub Main()
tc = ThisComponent
'... Dein Code

'Fokus auf Zelle:
myView = tc.CurrentController
mysheet = tc.sheets(0)
mycell =  mysheet.getCellByPosition(0,0)
myView.Select(mycell)
End Sub

Das überhaupt diese Art des Fehlers vorliegt ist aber rein geraten und muss nicht so sein, ohne genaue Untersuchung kann man den Fehler
nicht zuverlässig finden.

Gruß
Stephan
Steffen_dcw
Beiträge: 5
Registriert: Di, 25.04.2017 13:51

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Steffen_dcw »

Danke erstmal bis hierhin. Ich konnte das Problem weiter eingrenzen. Das Beispiel "Dialog.ods" funktioniert auch bei mir problemlos. Der Fehler hängt mit der Art des Dialogaufrufes zusammen. Erfolgt dieser mittels Button klappt alles. Erfolgt der Aufruf jedoch mittels Tabellenereignis "Doppelklick" reproduziert sich auch hier der Fehler. Ich möchte jedoch nicht 50 Zeilen mit Buttons ausrüsten.... Geändertes Beispiel siehe unten.

Gruß Steffen
Dateianhänge
Dialog.ods
(12.43 KiB) 270-mal heruntergeladen
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Stephan »

Ich kann keine Probleme feststellen (getestet mit OOo 3.3.0 und AOO 4.1.2) egal ob ich in DEiner Datei das Makro mit Schaltfläche oder Doppelklick in A3 starte, immer kann ich, nachdem sich der Dialog geschlossen hat, sofort weitertippen und meine Tastatureingaben landen in Zelle D4.

Vielleicht ist Dein OO-Benutzerverzeichnis nicht ganz in Ordnung. Benenne es testweise um und prüfe ob das etwas ändert:
viewtopic.php?f=27&t=54231#p206070


Gruß
Stephan
Steffen_dcw
Beiträge: 5
Registriert: Di, 25.04.2017 13:51

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Steffen_dcw »

Hallo Stephan,
das ist nicht der Fehler. Tastatureingaben lassen sich auch bei mir korrekt durchführen.
Nochmal die Ausgangslage: wenn ich mit der Maus über die Menübuttons der Anwendung fahre, so wechseln sie je nach Fokus die Hintergrundfarbe und lassen sich auch korrekt bedienen.
Jetzt starte ich den Dialog mit Doppelklick, gebe etwas ein und drücke 'OK'. Wenn ich jetzt wieder mit der Maus über die Menübuttons fahre passiert nichts mehr (Fehler). Der Zellzeiger steht dort, wo er hingehört und sieht auch ganz normal aus. Drücke ich eine Buchstabentaste, so erfolgt die Eingabe korrekt in die Zelle. Auch jetzt noch erfolgt kein Farbwechsel beim Bewegen der Maus (Fehler). Auch der Button 'Grüner Haken' wechselt seine Hintergrundfarbe nicht. Klicke ich auf den Haken, erfolgt die korrekte Übernahme aber gleichzeitig wechselt der Zellzeiger in die oberste Zeile in die Nähe des Hakens (Fehler) Mit Entertaste wirds korrekt übernommen. Das größte Problem ist für halt, wenn ich im Fehlerzustand auf den Scrollbaken klicke, springt der Zellzeiger nach rechts in die Nähe des Scrollbalkens.
Das Ganze sieht für mich so aus,als ob der Doppelkick vom Anfang nicht komplett verarbeitet wird, sondern der 2. Klick quasi verschluckt wird. Die erste Handlung nach dem Dialog wird dann als Teil des Doppelkickes verarbeitet
Die Umbenennung des Userverzeichnisses habe ich durchgeführt - ohne Erfolg

Gruß Steffen
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Stephan »

Jetzt starte ich den Dialog mit Doppelklick, gebe etwas ein und drücke 'OK'. Wenn ich jetzt wieder mit der Maus über die Menübuttons fahre passiert nichts mehr (Fehler). Der Zellzeiger steht dort, wo er hingehört und sieht auch ganz normal aus. Drücke ich eine Buchstabentaste, so erfolgt die Eingabe korrekt in die Zelle. Auch jetzt noch erfolgt kein Farbwechsel beim Bewegen der Maus (Fehler).
Ja. Ök. kann ich jetzt nachvollziehen, aber ich habe dafür keine Lösung.
Zumal es mich nicht stört sondern in täglichen diversen kleinen Problemen bei der Arbeit mit dem Computer untergeht.


Gruß
Stephan
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von mikeleb »

Hallo,
das Problem haben wir (in diesem oder einem Nachbarforum) schon mal durchdiskutiert und gelöst:
Der Kniff ist, der Sub, die per Doppelklick aufgerufen wird, einen logischen Wert zu verpassen (im Sinne von "ist erledigt")

Code: Alles auswählen

Sub Blatt_byClick() as boolean
	oDoc = ThisComponent
	oSheet = odoc.currentcontroller.activesheet
	AktiveZeile = oDoc.getCurrentSelection().getCellAddress().row
	AktiveSpalte = oDoc.getCurrentSelection().getCellAddress().column
	if AktiveZeile >= 0 and AktiveZeile <= 4 and AktiveSpalte = 0 then
		S_Dialog_starten
		
	endif
	Blatt_byClick=true	
end sub
Um nach dem Sprung zur Zielzelle (wenn noch benötigt) die (blaue) Auswahlmarkierung zu entfernen, müssten zwei Zeilen ergänzt werden:

Code: Alles auswählen

Sub S_Dialog_starten
    oSheet = ThisComponent.sheets.getbyName("Tabelle1")
    DialogLibraries.loadLibrary("Standard")
    odlg = CreateUnoDialog(DialogLibraries.Standard.dlg)
    oTextField1 = odlg.getcontrol("TextField1")
    odlg.execute
    '-------
	oCell = oSheet.getCellByPosition(3,3)
	oCell.string = oTextField1.Text
	oController = thisComponent.CurrentController
	
    oController.Select(oCell)
	oDummy=Thiscomponent.createInstance("com.sun.star.sheet.SheetCellRanges")
	oController.Select(oDummy)
End Sub
Zuletzt geändert von mikeleb am Do, 27.04.2017 17:45, insgesamt 1-mal geändert.
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Stephan »

Um nach dem Sprung zur Zielzelle (wenn noch benötigt) die (blaue) Auswahlmarkierung zu entfernen, müssten zwei Zeilen ergänzt werden:
wie man diese falsche Markierung per Makro wegbekommt hätte ich gewusst, ich hatte heute Vormittag aber schon doe Markierung per Pfeil-Runter-Taste normalisiert und glaubte jetzt beim L:esen Deines Beitrages das wäre meine Oberflächlichkeit gewesen und es würde per Code das Problem beheben ... sorry, nur das ist nicht der Fall, also trotzdem Dein Code die Markierung auf 'Normal' (nur Rahmen ohne Hinterlegung) setzt ist das vom Nutzer angesprochene Problem, zumindest bei mir, nicht behoben (so gerade getestet in AOO 4.1.3.)


Gruß
Stephan
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von mikeleb »

Hallo,
das mit der Markierung (in Sub S_Dialog_starten) war nur ein Zugabe.
Das Entscheidende ist

Code: Alles auswählen

Blatt_byClick=true
Hier scheint sich also mal wieder ein Unterschied zwischen AOO und LO aufzutun.
edit: unter AOO4.1.1 ist das Problem (bei mir) allerdings auch behoben
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Stephan »

mikeleb hat geschrieben: Do, 27.04.2017 17:51 Hallo,
das mit der Markierung (in Sub S_Dialog_starten) war nur ein Zugabe.
Das Entscheidende ist

Code: Alles auswählen

Blatt_byClick=true
Hier scheint sich also mal wieder ein Unterschied zwischen AOO und LO aufzutun.
edit: unter AOO4.1.1 ist das Problem (bei mir) allerdings auch behoben
Danke für die nochmalige Erklärung, ich hatte das erste Makro von Dir ignoriert, wenn ich jetzt das Gesagte beachte funktioniert es bei mir (Getestet AOO 4.1.2)


Gruß
Stephan
Steffen_dcw
Beiträge: 5
Registriert: Di, 25.04.2017 13:51

Re: Dialoge - Verhalten nach dem Beenden

Beitrag von Steffen_dcw »

mikeleb hat geschrieben: Do, 27.04.2017 17:51 Hallo,
das mit der Markierung (in Sub S_Dialog_starten) war nur ein Zugabe.
Das Entscheidende ist

Code: Alles auswählen

Blatt_byClick=true
Hier scheint sich also mal wieder ein Unterschied zwischen AOO und LO aufzutun.
edit: unter AOO4.1.1 ist das Problem (bei mir) allerdings auch behoben
Heureka, das isses!!! Wunderhübsch! Ich danke Dir für diesen entscheidenden Tip!

Gruß Steffen
Antworten