Tabellenbereich einblenden

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

Moderator: Moderatoren

toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Tabellenbereich einblenden

Beitrag von toni »

Hallo zusammen,

Mit einem Button am Ende meines Sheets (Zeile 300), führe ich eine Plausiprüfung durch. Bei einem Eingabefehler sollen zwei Dinge passieren:
1. Eine Meldung soll angezeigt werden.
2. Der Tabellenbereich in dem sich die entsprechende Zelle befindet, soll sichtbar sein.
Mit

Code: Alles auswählen

oZelle = oSheet.getCellRangeByName("A1")
      ThisComponent.CurrentController.Select(oZelle) 
bekomme ich auch den obersten Bereich des Sheets angezeigt, aber in Verbindung mit einer Meldung springt dann die Ansicht wieder in den Bereich, wo sich der Plausibutton befindet (Zeile 300).

Code:

Code: Alles auswählen

Sub sel
    Dim osheet, oZelle
      oSheet = ThisComponent.CurrentController.ActiveSheet   
      oZelle = oSheet.getCellRangeByName("A1")
      ThisComponent.CurrentController.Select(oZelle)         
      MsgBox "Meldung"
End Sub

Wenn ich diesen Code per Button ausführe (Button liegt z.B. in Zeile 300), springt die Anzeige nach Schließen der msgBox wieder in die Zeile 300, wo der Button liegt.
Ich möchte aber die Sicht auf Zeile 1 behalten.

Weiß jemand Rat?

Gruß

Thomas
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas,
die Sicht auf Zeile 1 behalten
so kommst du im gerade aktiven blatt auf die zelle a1

Code: Alles auswählen

Sub Main

	oView=thisComponent.CurrentController
	oSheet = ThisComponent.CurrentController.ActiveSheet 
	meineZelle=oSheet.getCellRangeByName("A1")

	oView.setActiveSheet(oSheet)
	oView.select(meineZelle)

End Sub
oView hat auch die eigenschaften "freezeAtPosition" bzw. setFirstVisibleColumn" bzw. "setFirstVisibleRow"

grüße
klaus
toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Beitrag von toni »

Hallo Klaus,

so langsam verzweifel ich!

Ich habe deinen Code in einem leeren Calc-Dokument getestet.
Er funktioniert mit und ohne msgBox, mit 'setFirstVisibleRow' oder mit 'select'.

Sobald ich die Sub aber in mein bestehendes Programm einfüge tritt wieder das alte Phänomen auf:
Mit

Code: Alles auswählen

   meineZelle=oSheet.getCellRangeByName("A1")
   oView.setActiveSheet(oSheet)
   oView.select(meineZelle)
ist alles in Ordnung und die erste Zeile ist im Blickfeld.

Mit

Code: Alles auswählen

   meineZelle=oSheet.getCellRangeByName("A1")
   msgBox "Meldung"
   oView.setActiveSheet(oSheet)
   oView.select(meineZelle)
springt die Ansicht in Zeile 300, wo der Button liegt, mit dem ich die Sub aufgerufen habe.

Ich habe die Button ausgetauscht, es in anderen Sheets der Anwendung versucht, es passiert immer das selbe.

Ne Ahnung, woran es liegen könnte?

Gruß

Thomas
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas,
Ne Ahnung, woran es liegen könnte?
es liegt an der msgbox. brauchst du die an dieser stelle im code? oder versuch es mit

Code: Alles auswählen

   oView.freezeAtPosition(0,1)
grüße
klaus
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Ne Ahnung, woran es liegen könnte?
Ja - daran das die Schaltfläche mit der Du das Makro startest den Fokus erhält. Das Fokus-Ereignis der Schaltfläche ist zwar abgeschlossen bevor das Makro startet, die Zellmarkierung übernimmt unter den gegebenen Umständen jedoch den Fokus nicht, die MsgBox jedoch schon, womit nach Verschwinden der MsgBox der Fokus wiederum an das Element zurückfällt was ihn vor der Übernahme durch die MsgBox inne hatte, ebend Deine Schaltfläche.
Du kannst das nachvollziehen wenn Du der Schaltfläche jeweils ein Makro für Fokuserhalt und Fokusverlust zuordnest.

Die einfachste Möglichkeit das Ganze zu verhindern ist es der Schaltfläche erst garkeinen Fokus zu geben, setze dazu in den Eigenschaften der Schaltfläche die Eigenschaft "Fokussieren bei Klick" von True auf False (bzw. Ja auf Nein).




Gruß
Stephan
toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Beitrag von toni »

Dank euch beiden,

dein Tip mit dem Fokuserhalt, Stephan, ist die Lösung!!!
Da hätte ich auch selber drauf kommen können, wenn ich mir die Eigenschaften mal näher angesehen hätte... :oops:

Allerdings wundert es mich schon, dass das Verhalten nicht einheitlich ist.

Gruss

Thomas
Antworten