Position im Tabellenkontollfeld

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

Moderator: Moderatoren

TheTheo
Beiträge: 3
Registriert: Mi, 26.12.2012 18:22

Position im Tabellenkontollfeld

Beitrag von TheTheo »

Hallo,

in einem Formular habe ich ein Tabellenkontrollfeld ( MainForm_Grid ).
Die Inhalte werden durch einen Dialog bearbeitet. Danach kommt es zum reload
des Hauptformulares um dessen Ansicht zu aktualisieren. Dadurch springt der Markierer
oder der Cursor des Tabellenfeldes wieder in die 1. Position.

Wie kann ich mir merken welche Position ( also die Zeile ) der Markierer
vor dem bearbeiten hatte, und wie kann ich ihn nach dem reload wieder dort hinbewegen?

So kann ich einfach weiterabeiten und muß nicht durch die Zeilen scrollen.

Bisher fand ich oForm.last() und oForm.first(), das hilft mir aber nicht.

Danke
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Position im Tabellenkontollfeld

Beitrag von juetho »

Eigentlich geht es ganz einfach:

Code: Alles auswählen

dim curRow as Integer
curRow = oForm.getRow    ' die aktuelle Zeile merken
oForm.reload
oForm.absolute(curRow)   ' neu setzen
Leider sind solche Hinweise äußerst schwer zu finden. Ich wurde durch andere Helfer auf den richtigen Weg gebracht (Dank u.a. an F3K, RobertG, DPunch). Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
TheTheo
Beiträge: 3
Registriert: Mi, 26.12.2012 18:22

Re: Position im Tabellenkontollfeld

Beitrag von TheTheo »

Ich bedanke mich, hat sofort funktioniert! :-)
Leider sind solche Hinweise äußerst schwer zu finden.
Das kann man laut sagen!
Ich wurde durch andere Helfer auf den richtigen Weg gebracht (Dank u.a. an F3K, RobertG, DPunch). Gruß Jürgen
Da schließe ich mich glatt an.

Grüße
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Position im Tabellenkontollfeld

Beitrag von Stephan »

Leider sind solche Hinweise äußerst schwer zu finden.
eigentlich nicht, es braucht nur die api-referenz:
http://www.openoffice.org/api/docs/comm ... l#absolute

und um dort die richtige Stelle zu finden entweder XRAY (http://sourceforge.net/projects/ooomacr ... ion%205.2/) oder ähnliche Tools oder ganz einfach (ich verwende das auf Bequemlichkeit meist):

Msgbox <objekt>.dbg_properties
Msgbox <objekt>.dbg_methods


Gruß
Stephan
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Position im Tabellenkontollfeld

Beitrag von juetho »

Stephan hat geschrieben:eigentlich nicht, es braucht nur die api-referenz:
http://www.openoffice.org/api/docs/comm ... l#absolute
Theoretisch hast du recht (und diese Seite zu XResultSet ist bei mir inzwischen standardmäßig als Tab geöffnet). Aber wenn man wissen will, welche Eigenschaften und Methoden es bei einem Objekt gibt, muss man sehr viel durch die Interfaces (Schnittstellen) suchen und blättern, und auch über Xray ist es ziemlich umständlich.

Am wichtigsten bei deinem Beitrag dürfte der Hinweis auf diese Hilfsmittel (API, Xray) sein, und der sollte auch TheTheo und späteren Lesern helfen. Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Position im Tabellenkontollfeld

Beitrag von Stephan »

und auch über Xray ist es ziemlich umständlich
Entschuldigung, nur ich verstehe echt Null warum.
Am wichtigsten bei deinem Beitrag dürfte der Hinweis auf diese Hilfsmittel (API, Xray) sein, und der sollte auch TheTheo und späteren Lesern helfen.
ja, und so lag es auch in meiner Absicht

Eine ernsthafte Diskussion zum Thema erwarte ich hingegen nicht, da ja heutzutage eine Mehrheit glaubt programmieren müsse man nicht lernen und eine Programmiersprache wäre dann gut dokumentiert wenn es genügend Beispielcode im Netz gibt, den man mit Copy und Paste in seine eigenen Programm reinkopieren und sich anschließend Programmierer nennen kann.

Ja, das mag unfreundlich klingen ist aber so ungefähr das was bei Vielen 'Programmierern' hinsichtlich VBA statttfindet und was diese 'Programmier' nun auch bei StarBasic & Co erwarten.

Du, Jürgen, bist damit nicht gemeint, allein solltest auch Du verstehen können das:
Leider sind solche Hinweise äußerst schwer zu finden. Ich wurde durch andere Helfer auf den richtigen Weg gebracht (Dank u.a. an F3K, RobertG, DPunch).


eigentlich nichts weiter ist als ein notwendiger Lernprozess und man nicht erwarten kann irgendwas auf der Welt zu können ohne es zu erlernen.


Gruß
Stephan
TheTheo
Beiträge: 3
Registriert: Mi, 26.12.2012 18:22

Re: Position im Tabellenkontollfeld

Beitrag von TheTheo »

Entschuldigung, nur ich verstehe echt Null warum.
Klar, weil du weisst wo du suchen musst. Dann ist es immer einfach.
Du warst so freundlich die richtige Stelle in der Api referenz anzugeben.
(http://www.openoffice.org/api/docs/comm ... l#absolute)

Was du nicht sagst ist, woher du das weisst. Bzw wie der logische Zusammenhang zu finden ist
ausgerechnet an dieser Stelle nachzulesen.
... programmieren müsse man nicht lernen und eine Programmiersprache wäre dann gut dokumentiert ....
Du glaubst doch nicht ernsthaft das hier von einer guten Dokumentation die Rede sein kann. Ich arbeite mit
StarOffice von den ersten Tagen an. Insbesondere ist der Zusammenhang Formulare und Basic oder Macros
einfach grauenhaft dokumentiert. Und das ist immer noch so. Ich habe immer noch schneller einen Dialog
geschrieben ( also quasi ein eigenes Formular entwickelt ) als mich durch die "Informationen" zu kämpfen, wie die
verschiedenen Formularelemente durch Basic anzusprechen und zu steuern sind.
...nichts weiter ist als ein notwendiger Lernprozess und man nicht erwarten kann irgendwas auf der Welt zu können ohne es zu erlernen.
Was jetzt, programmieren lernen oder die Api-Referenz zu verstehen? Das ist nicht das Gleiche!

Aber egal, machen wir mal weiter, nur so als sportliche Herausforderung.
Ich hatte gefragt:
Wie kann ich mir merken welche Position ( also die Zeile ) der Markierer
vor dem bearbeiten hatte, und wie kann ich ihn nach dem reload wieder dort hinbewegen?
Dank Deiner und Jürgens Hilfe ist das jetzt so. Nochmals Dank.
Aber - die Position des Markierers im sichtbaren Bereich des Grids hat sich verändert.
Das Grid zeigt 8 nur Datensätze aus einer gößeren Menge an. Nach dem reload und setzten des
Markieres ( oForm.absolute(igendwas) ) steht er irgendwo im sichtbaren Bereich,
nur nicht mehr an der gleichen Stelle wie vor der Bearbeitung.

Wie bekomme ich den Markierer im sichtbaren Breich des Grids wieder dorthin wo er vorher stand?

Ich will gar nicht wissen wie das geht. Was ich gerne wüsste, insbesondere von Stephan, ist,
wo oder wonach in der Api-Referenz nun zu suchen ist und noch wichtiger:
Wie bist du darauf gekommen? (Falls eine Lösung überhaupt gibt)

Das wäre sehr hllfreich.


Dank und Grüße
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Position im Tabellenkontollfeld

Beitrag von F3K Total »

Moin,
TheoTheo hat geschrieben:Ich will gar nicht wissen wie das geht. Was ich gerne wüsste, insbesondere von Stephan, ist,
wo oder wonach in der Api-Referenz nun zu suchen ist und noch wichtiger:
Wie bist du darauf gekommen? (Falls eine Lösung überhaupt gibt)
ich zeige Dir mal, wie ich das mache:
Angenommen ich möchte etwas übers Tabellenkontrollfeld wissen:
Dann mache ich z.B. ein XRAY auf das Tabellenkontrollfeld (mit MRI geht das auch):

Code: Alles auswählen

Sub S_xray_Grid
    oform = Thiscomponent.drawpage.forms.MainForm
    ogrid = oform.MainForm_Grid
   xray ogrid
End Sub
Wenn ich oben links die Services anklicke habe ich folgendes Ergebnis:
xray.png
xray.png (54.04 KiB) 1916 mal betrachtet
Nun z.B. den Service com.sun.star.form.component.GridControl markieren und auf API Doc klicken - ob das online funzt kann ich nicht sagen, ich habe das SDK für Windows lokal auf meinem Rechner und XRAY entsprechend konfiguriert.
Dann öffnet Firefox mir diese lokale Seite
SDK.png
SDK.png (160.73 KiB) 1916 mal betrachtet
von wo aus ich weiternavigiere ...
Nun ein XRAY auf das Formular:

Code: Alles auswählen

Sub S_xray_Form
    oform = Thiscomponent.drawpage.forms.MainForm
    xray oform
End Sub
Markiere ich nun die Methode (oben links) absolute und klicke auf API Doc kommt:
absolute
boolean
absolute( [in] long row )
raises( SQLException );

Description
moves the cursor to the given row number in the result set.

If the row number is positive, the cursor moves to the given row number with respect to the beginning of the result set. The first row is row 1, the second is row 2, and so on.

If the given row number is negative, the cursor moves to an absolute row position with respect to the end of the result set. For example, calling absolute(-1) positions the cursor on the last row, absolute(-2) indicates the next-to-last row, and so on.

An attempt to position the cursor beyond the first/last row in the result set leaves the cursor before/after the first/last row, respectively.

Note: Calling absolute(1) is the same as calling XResultSet::first() . Calling moveToPosition(-1) is the same as calling moveToLast().
... also das gleiche, was Stephan oben verlinkt hat.
HTH
Gruß R
Antworten