Writer: Zeile mit Cursor zur zweiten Zeile im Fenster machen

Hallo zusammen!

Bei der Bearbeitung langer Texte möchte ich oft die Zeile, in der der Cursor steht (das ist oft eine der letzten im Fenster), zur zweiten Zeile im Fenster machen: Dann sehe ich das, was kommt, und kann besser entscheiden, wie ich den Text bearbeite.

Ich stelle mir ein Makro vor, das die Zeile, in der gerade die Schreibmarke steht, zur zweiten Zeile im Fenster macht, und die Schreibmarke mitnimmt.

Dazu habe ich nichts Passendes gefunden.
Ist das überhaupt möglich?
Kann man LibreOffice fragen, in der wievielten Zeile der Cursor steht?
Kann man LibreOffice sagen: "Mache die zwölfte Zeile zur zweiten!"?

Viele Grüße

Guido

Hallo Dischinger,

Hallo zusammen!

Bei der Bearbeitung langer Texte möchte ich oft die Zeile, in der
der Cursor steht (das ist oft eine der letzten im Fenster), zur
zweiten Zeile im Fenster machen: Dann sehe ich das, was kommt,
und kann besser entscheiden, wie ich den Text bearbeite.

Ich stelle mir ein Makro vor, das die Zeile, in der gerade die
Schreibmarke steht, zur zweiten Zeile im Fenster macht, und die
Schreibmarke mitnimmt.

Macht ein kurzer Dreh am Mausrad nicht das Gewünschte?

Gehen tut sowas schon; im Prinzip möchtest du einfach den ViewCursor
bearbeiten.

Allerdings bin ich nicht sehr firm in diesem Bereich, d.h. ich kann dir
nur ein paar allgemeinere Tipps geben. Aber schau dir mal folgende
Seiten an (gips sicher auch bei Libreoffice, hab ich aber auf die
Schnelle nicht gefunden, und wird eh das selbe sein):

https://wiki.openoffice.org/wiki/Writer/API/View_cursor
https://wiki.openoffice.org/wiki/Writer/API/Text_cursor

Das sollte dir zumindest eine Idee geben, in welche Richtung du weiter
suchen musst.

Das größere Problem sehe ich eigentlich darin, alle möglichen und
unmöglichen Fälle ab zu fangen (Cursor im/außerhalb des sichtbaren
Bereichs, Drucklayout/Weblayout, Seitenende, mehrseitige Darstellung,
Zoomfakor, über/unter was-weiß-ich, ...; und das sind nur einige wenige
Punkte, die mir so /spontan/ einfallen).

Wolfgang

Hallo Dischinger,

Hallo zusammen!

Bei der Bearbeitung langer Texte möchte ich oft die Zeile, in der
der Cursor steht (das ist oft eine der letzten im Fenster), zur
zweiten Zeile im Fenster machen: Dann sehe ich das, was kommt,
und kann besser entscheiden, wie ich den Text bearbeite.

Ich stelle mir ein Makro vor, das die Zeile, in der gerade die
Schreibmarke steht, zur zweiten Zeile im Fenster macht, und die
Schreibmarke mitnimmt.

Macht ein kurzer Dreh am Mausrad nicht das Gewünschte?

Der Griff zur Maus ist mir viel zu weit.
Ich habe mir schon Makros geschrieben, die die Funktion der Pfeiltasten auf das Buchstabenfeld legt, damit ich die rechte Hand nicht so weit weg bewegen muss.

.... Ade
           Guido

Hallo zusammen!

Bei der Bearbeitung langer Texte möchte ich oft die Zeile, in der der
Cursor steht (das ist oft eine der letzten im Fenster), zur zweiten
Zeile im Fenster machen: Dann sehe ich das, was kommt, und kann besser
entscheiden, wie ich den Text bearbeite.

Ich stelle mir ein Makro vor, das die Zeile, in der gerade die
Schreibmarke steht, zur zweiten Zeile im Fenster macht, und die
Schreibmarke mitnimmt.

Gehen tut sowas schon; im Prinzip möchtest du einfach den ViewCursor
bearbeiten.

Allerdings bin ich nicht sehr firm in diesem Bereich, d.h. ich kann dir
nur ein paar allgemeinere Tipps geben. Aber schau dir mal folgende
Seiten an (gips sicher auch bei Libreoffice, hab ich aber auf die
Schnelle nicht gefunden, und wird eh das selbe sein):

https://wiki.openoffice.org/wiki/Writer/API/View_cursor
https://wiki.openoffice.org/wiki/Writer/API/Text_cursor

Das sollte dir zumindest eine Idee geben, in welche Richtung du weiter
suchen musst.

Ich habe schon in den beiden Büchern "Makro Grundlagen" von Thomas Krumbein gesucht und in den obigen Links zu wiki.openoffice.org auch nicht mehr gefunden. Trotzdem vielen Dank für die Links!!

Das Problem scheint mir tatsächlich die Abfrage zu sein: In der wievielten Zeile steht denn der ViewCursor? - Und dann die Steuerung: Setze ViewCursor und TextCursor so, dass beide in der zweiten Zeile stehen.

Das größere Problem sehe ich eigentlich darin, alle möglichen und
unmöglichen Fälle ab zu fangen (Cursor im/außerhalb des sichtbaren
Bereichs, Drucklayout/Weblayout, Seitenende, mehrseitige Darstellung,
Zoomfakor, über/unter was-weiß-ich, ...; und das sind nur einige wenige
Punkte, die mir so /spontan/ einfallen).

Da sehe ich kein Problem, weil ich da immer mit denselben Einstellungen arbeite. Und wenn in seltenen Fällen das Makro abstürzen sollte, macht mir das nichts aus.

Hallo Dischinger

Snip

Das Problem scheint mir tatsächlich die Abfrage zu sein: In der
wievielten Zeile steht denn der ViewCursor? - Und dann die Steuerung:
Setze ViewCursor und TextCursor so, dass beide in der zweiten Zeile stehen.

Nicht nur das. Die Position im Gesamttext dürfte relativ einfach heraus zu
finden sein.

Aber du willst ja, dass Cursor in die zweite Bildschirmzeile springt. Dh du
musst fest stellen, wo dein Bildauschnitt relativ zu Textanfang oder -ende
eigentlich ist. Weiterhin musst du wissen, wieviele Zeilen dein Bildschirm
darstellen kann. Wenn du das alles weißt, kannst du berechnen wieviele Zeilen
dein Cursor rauf muss.

> Das größere Problem sehe ich eigentlich darin, alle möglichen und
> unmöglichen Fälle ab zu fangen (Cursor im/außerhalb des sichtbaren
> Bereichs, Drucklayout/Weblayout, Seitenende, mehrseitige Darstellung,
> Zoomfakor, über/unter was-weiß-ich, ...; und das sind nur einige wenige
> Punkte, die mir so /spontan/ einfallen).

Das kommt alles noch dazu. Schriftgröße 10 liefert mehr Zeilen im Bildschirm,
als Schriftgröße 16, bei Zoomfaktor 100%.

Da sehe ich kein Problem, weil ich da immer mit denselben Einstellungen
arbeite. Und wenn in seltenen Fällen das Makro abstürzen sollte, macht
mir das nichts aus.

Solche blauäugigen Annahmen sind der Tod eines jeden Projekts.

Das Problem scheint mir tatsächlich die Abfrage zu sein: In der
wievielten Zeile steht denn der ViewCursor? - Und dann die Steuerung:
Setze ViewCursor und TextCursor so, dass beide in der zweiten Zeile stehen.

Nicht nur das. Die Position im Gesamttext dürfte relativ einfach heraus zu
finden sein.

Aber du willst ja, dass Cursor in die zweite Bildschirmzeile springt.

Nein; er will, dass sich der Bildschirmausschnitt so verschiebt, dass er
eine Zeile über der mit dem Cursor beginnt. Sprich sich die Zeile mit
dem Cursor im neuen Ausschnitt als zweite Zeile von oben wiederfindet.

Die Berechnung und Vorgehensweise ist aber im Prinzip genau so, wie du
erklärt hast, nur dass sich am Ende nicht der Cursor bewegt, sondern der
Bildschirmausschnitt.

Und für den Bildschirmausschnitt gibt es durchaus ein Objekt in der API.
Ich weiß nur nicht genau, ob das der ViewCursor ist oder ein anderes
(ich tendiere fast zu letzterem). Da müsste der OP eben mal tiefer in
die Materie einsteigen, wie ich schon in meiner anderen Mail schrub.

Irgendwo im Netz /gibt/ es eine Doku über die komplette API; ich habe
sie nur auf die Schnelle nicht mehr gefunden. Notfalls muss er sich eben
die Methoden und Eigenschaften eines Objektes selber zusammen klauben
(siehe
https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/UNO_Tools ),
angefangen bei thisComponent.

Da sehe ich kein Problem, weil ich da immer mit denselben Einstellungen
arbeite. Und wenn in seltenen Fällen das Makro abstürzen sollte, macht
mir das nichts aus.

Solche blauäugigen Annahmen sind der Tod eines jeden Projekts.

Nanana, Beleidigungen müssen nicht sein.

Wolfgang

Hallo Wolfgang,

Snip

>> Da sehe ich kein Problem, weil ich da immer mit denselben Einstellungen
>> arbeite. Und wenn in seltenen Fällen das Makro abstürzen sollte, macht
>> mir das nichts aus.
>
> Solche blauäugigen Annahmen sind der Tod eines jeden Projekts.

Nanana, Beleidigungen müssen nicht sein.

Das sollte keine Beleidigung sein, sondern ist eine Tatsachenerkenntnis aus
inzwischen 27 Jahren Softwareentwicklung und Systemverwaltung.

Das Problem scheint mir tatsächlich die Abfrage zu sein: In der
wievielten Zeile steht denn der ViewCursor? - Und dann die Steuerung:
Setze ViewCursor und TextCursor so, dass beide in der zweiten Zeile stehen.

Nicht nur das. Die Position im Gesamttext dürfte relativ einfach heraus zu
finden sein.

Aber du willst ja, dass Cursor in die zweite Bildschirmzeile springt.

Nein; er will, dass sich der Bildschirmausschnitt so verschiebt, dass er
eine Zeile über der mit dem Cursor beginnt. Sprich sich die Zeile mit
dem Cursor im neuen Ausschnitt als zweite Zeile von oben wiederfindet.

Die Berechnung und Vorgehensweise ist aber im Prinzip genau so, wie du
erklärt hast, nur dass sich am Ende nicht der Cursor bewegt, sondern der
Bildschirmausschnitt.

Und für den Bildschirmausschnitt gibt es durchaus ein Objekt in der API.
Ich weiß nur nicht genau, ob das der ViewCursor ist oder ein anderes
(ich tendiere fast zu letzterem). Da müsste der OP eben mal tiefer in
die Materie einsteigen, wie ich schon in meiner anderen Mail schrub.

Irgendwo im Netz /gibt/ es eine Doku über die komplette API; ich habe
sie nur auf die Schnelle nicht mehr gefunden. Notfalls muss er sich eben
die Methoden und Eigenschaften eines Objektes selber zusammen klauben
(siehe
https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/UNO_Tools ),
angefangen bei thisComponent.

Das kostet mich mehr Zeit, als ich habe, und daher gebe ich vorerst auf.
Trotzdem herzlichen Dank für die Tipps!

Das ist kein Projekt, sondern soll ein kleines Helferlein für die ausschließlich private Nutzung sein. Daher entscheide ich über die Robustheit der Lösung, und wenn meine Annahmen blauäugig waren, trage ich auch die Konsequenzen.

Aus meiner Sicht ist die Diskussion zu diesem Thema erledigt, weil ich keine Möglichkeit sehe, in für mich vertretbarer Zeit zu einer Lösung zu kommen.

Ich danke für alle Beiträge!

Guido