Dynamische Textfeld-Größenanpassung

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

Moderator: Moderatoren

marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Dynamische Textfeld-Größenanpassung

Beitrag von marcel_at_work »

Man...... so ein Mist. DAS muß man erstmal wissen! :lol:

Herzlichen Dank und viele liebe Grüße,

Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Dynamische Textfeld-Größenanpassung

Beitrag von marcel_at_work »

Ps.:

Eine Frage hätt' ich da noch zu deinem Code.
Und zwar weißt du im unteren Teil "sTextlines" etwas zu, ohne diese Variable jemals deklariert zu haben - und dies ohne Fehlermeldung??? Wie geht denn das?

LG, Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: Dynamische Textfeld-Größenanpassung

Beitrag von F3K Total »

Wenn man nicht

Code: Alles auswählen

Option Explicit
definiert, braucht man nix zu deklarieren.
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Dynamische Textfeld-Größenanpassung

Beitrag von marcel_at_work »

Machst du das dann immer so? Als ich mich damals in OOo reinlas, dachte ich, das wäre Standard?

LG
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: Dynamische Textfeld-Größenanpassung

Beitrag von F3K Total »

Bei kurzen übersichtlichen Makros mache ich es, obwohl es nicht State of the Art ist. Faulheit eben.
Kleiner Nachtrag, wenn Du ein Kontrollfeld beim Erstellen des Runtime-Dialogs definierst, funktioniert die 0 (null)

Code: Alles auswählen

REM **********Textfeld erzeugen       
oMod = odlgModel.createInstance("com.sun.star.awt.UnoControlEditModel")
With oMod
   .setPropertyValue("Name", "Test")
   .setPropertyValue("PositionX", 10)
   .setPropertyValue("PositionY", 10)
   .setPropertyValue("Height", 180)
   .setPropertyValue("Width", 130)
   .setPropertyValue("MultiLine", true)
   .setPropertyValue("Text","konnte ich nicht glauben")
   .setPropertyValue("Border", 0)
End With     
odlgModel.insertByName("Test", oMod)
odlg.setModel(odlgModel)
Warum das Umstellen nach dem Aufruf nur mit -1 funktioniert, weiß ich nicht.
Gruß R
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Dynamische Textfeld-Größenanpassung

Beitrag von marcel_at_work »

Hey hey... gut zu wissen. :lol:

Naja, es gibt in BASIC halt immer noch vieles, was nicht in OOo migriert ist(wie u.a. auch eine bestimmte Logik :lol: )

Viele Grüße aus München und einen wundervollen Nachmittag noch,

Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dynamische Textfeld-Größenanpassung

Beitrag von balu »

Hallo Leute,

entschuldigt bitte das ich hier so von der Seite her reinplatze, aber ich hab da ein Problem mit dem Code von F3K Total. Und zwar geht es um diesen.
Wenn ich den Code nehme und via 'Copy & Paste' in ein leeres Modul einfüge, dann kann ich ihn auch von dort wohl ausführen, aber bei Klick auf das X rechts oben im Dialog hagelt es eine Fehlermeldung und in dieser Sub wird die .setVisible Zeile markiert.

Code: Alles auswählen

    'Diese Routinen werden von dem XTopWindowListener benötigt
    Sub Top_Win_windowClosing( oEvent ) 'Dialog schließen
        odlg.setVisible(False)
    End Sub
Die Objektvariable sei nicht belegt, heißt es dann.
Aber das warum und wieso ist für mich irgendwie nicht nachvollziehbar. Denn der Dialog "odlg" ist doch Ordnungsgemäß gleich ganz am Anfang GLOBAL deklariert worden, und ein probehalber tausch auf DIM bringt auch keine Änderung.

Einen irgendwie gearteten Tripsfähler kann ich aber auch nicht finden.

Ich vermute, weiß es aber nicht wirklich genau da ich damit noch keine Erfahrung gesammelt habe, das vielleicht etwas mit dem XTopWindowListener da noch nicht so richtig stimmt.

Also was läuft da bei mir schief?
Testumgebung:
- WinXP
- OOo 3.2.1 & 3.3.0, sowie AOO 4.0.1
In allen getesteten Office das gleiche Resultat.


Jetzt noch etwas das so nicht funktioniert.

Code: Alles auswählen

    Sub S_Create_Dialog
       
    Dim oWindow As Object
    Dim oMod As Object
    Dim i As Integer
    If  not isNull (odlg) then
      if odlg.isVisible() Then
        odlg.setVisible(False)
        odlg.dispose
      end if
    end if
R, Du fragst beim ausführen der Sub den Dialog ab ob er sichtbar ist, aber dabei ist er an dieser Stelle doch noch gar nicht erstellt worden. Er existiert doch noch gar nicht.


Ich hab mich deshalb hier mit eingeklinkt, weil ich mich derzeit auch mit dem erstellen von Dialogen zur Laufzeit befasse, und so hoffe das ich hier noch was für mich lernen kann. Auch wenn ich meinen Dialog per .execute aufrufe, so wird später auch der modale Dialog per Visible angewendet.
Und ja!
Das Thema hier ist für mich von interesse :).


Wäre schön wenn mir also wegen dem Fehler jemand weiterhelfen kann.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: Dynamische Textfeld-Größenanpassung

Beitrag von F3K Total »

Hallo Balu,
hast Du den TopWindowListener und die erforderlichen Subs mitgenommen?
Listener.png
Listener.png (13.24 KiB) 3067 mal betrachtet
Und die allererste Zeile?

Code: Alles auswählen

Global odlg as object
Noch eine Idee: Wenn du mal eine Fehlermeldung hattest, kann es sein, dass Basic durcheinandergekommen ist, einmal AOO schließen, neu starten Datei laden könnte helfen.
Edit: Nachdem ich deinen Beitrag nochmal genau gelesen habe, kann es keiner der Punkte sein. Komisch bei mir läßt sich der Dialog ordnungsgemäß über das Kreuz schließen.
Die Sache mit der Abfrage

Code: Alles auswählen

If  not isNull (odlg) then
  if odlg.isVisible() Then
    odlg.setVisible(False)
    odlg.dispose
  end if
end if
ist nicht auf meinem Mist gewachsen, habe ich aus dem www, kann aber nicht auf einen Fehler laufen, da mit

Code: Alles auswählen

If  not isNull (odlg) 
vorher abgefragt wird ob odlg existiert.
Gruß R
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dynamische Textfeld-Größenanpassung

Beitrag von balu »

Hallo R,

ich hab jetzt mal alles von meinem Geistigen Notizblock gestrichen was ich dir mitteilen wollte, da ich die Ursache für "mein Problem" festgestellt habe.

Der Übeldädar war die falsche Bibliothek!

Ich hatte nämlich eine weitere Bibliothek angelegt und das Makro dort in ein Modul reinkopiert. Es ist also nicht die Standardbibliothek von wo das Makro aus aufgerufen wird. Und als ich das Makro in die Standardbibliothek kopierte und von dort ausführte, funktioniert es auch bei mir.
Die Sache mit der Abfrage ...
... hat sich jetzt auch erledigt.
Denn in der zusätzlichen Bibliothek wurden durch das mehrfache ausführen der Sub mehrere Dialoge gestartet, was in der Standardbibliothek nicht der Fall ist.


Das interessante aber ist folgendes.
Mein selber erstellter Laufzeit-Dialog wird Ordnungsgemäß aus der zusätzlichen Bibliothek ausgeführt. Er ist aber auch ein klein wenig anders, da ich ja nicht mit Visible und einem Listner arbeite, sondern mit execute. Da ich ja mich mit einem Listner noch nicht selber intensiv befasst habe, frag ich mich zur Zeit nur warum da so ein großer Unterschied drin ist von wo (Bibliothek) er aufgerufen wird -{hat das jemand verstanden?}-. Aber das werd ich höchstwahrscheinlich auch noch herausfinden und begreifen.

Ich hab da mal meine Testversion mit dem Laufzeit-Dialog angehängt. Grundlage hatte ich hier aus dem Forum.


Es war wohl so gesehen meine eigene schusseligkeit das es zu dem Fehler kam, aber vielleicht ist die gefundene Lösung für dich ja auch von Interesse. Denn Kommissar Zufall ist oftmals ein guter 'Freund und Helfer' :lol:.



Gruß
balu
Dateianhänge
Test_Laufzeit-Dialog_for_Forum.ods
(22.43 KiB) 173-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: Dynamische Textfeld-Größenanpassung

Beitrag von F3K Total »

Hallo Balu,
vielen Dank für Deine Datei.
Ich wollte nur kurz den großen Vorteil des modalen Dialoges noch einmal nennen:
Wenn er aufgerufen ist, kann man, per Mausklick, in das dahinterliegende Dokument klicken, und weiter daran arbeiten.
Auf diese Weise kann man quasi eine Korrespondens zwischen Dialog und Dokument schaffen. Hier findest Du ein, wie ich finde, gut gelungenes Beispiel dafür.
Gruß R
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dynamische Textfeld-Größenanpassung

Beitrag von balu »

Hallo R,

Du musst dich doch nicht dafür rechtfertigen das Du einen modalen Dialog genommen hast. Mir ging es nur um mein Problem (auch wenn es meine unbewusste schusseligkeit war), und dann um den Verhaltensunterschied zwischen execute und visible. Denn mein funktionierendes Projekt mit "gezeichneten" Dialogen will ich mal so nach und nach auf Laufzeit-Dialoge umstellen. Und da werde ich dann auch modale Dialoge drin haben.

Bei diesem Projekt ist nämlich an gewissen Stellen folgende Situation.
Der "Hauptdialog" ist gestartet, und man kann dann dort Einstellungen vornehmen. Und wenn man dort nicht weiter kommt, dann klickt man auf Hilfe und es öffnet sich ein weiterer Dialog der dann dementsprechende Informationen zu dem "Hauptdialog" bietet. Und dieses Hilfefenster (Hilfedialog) kann man offen lassen und trotzdem mit den Einstellungen im "Hauptdialog" arbeiten.

Das ist also fast so ähnlich wie bei dir. Nur das bei mir 2 Dialoge zu sehen sind.

Ja!
Das mit den Runen hatte ich ausnahmweise mitbekommen. Obwohl ich mich ja nicht so sehr mit Writer befasse. Btw: Fand ich Klasse :D


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Dynamische Textfeld-Größenanpassung

Beitrag von DPunch »

Servus
balu hat geschrieben:Ich hatte nämlich eine weitere Bibliothek angelegt und das Makro dort in ein Modul reinkopiert. Es ist also nicht die Standardbibliothek von wo das Makro aus aufgerufen wird. Und als ich das Makro in die Standardbibliothek kopierte und von dort ausführte, funktioniert es auch bei mir.
Benenn die Variable odlg in der neu angelegten Bibliothek mal in etwas "eindeutiges" um (odlg123) und versuch es nochmal.
Dass etwas mit dem XTopWindowListener "nicht bestimmt" oder dass der Ort des Quellcodes (Bibliothek) grundsätzlich die Funktionalität des Codes beeinträchtigt, wage ich einfach mal sehr stark zu bezweifeln ;)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dynamische Textfeld-Größenanpassung

Beitrag von balu »

Hallo DPunch,
Benenn die Variable odlg in der neu angelegten Bibliothek mal in etwas "eindeutiges" um (odlg123) und versuch es nochmal.
:shock: Du hast einfach Recht. Mit oHptDialog funktioniert es auch in der zusätzlichen Bibliothek. Danke für diesen Tipp.

Dass etwas mit dem XTopWindowListener "nicht bestimmt" oder dass der Ort des Quellcodes (Bibliothek) grundsätzlich die Funktionalität des Codes beeinträchtigt, wage ich einfach mal sehr stark zu bezweifeln
Du hast gut Lachen. Du hast da ein viel größeres Wissen in dieser Hinsicht. Aber meiner einer steht da doch ziemlich dumm da, und wundert sich nur. Ich hatte aber auch sicherheitshalber ja gesagt das ich es nur vermute, und nicht behaupte das es so ist. Na ja. Wieder viel dazu gelernt. Danke schön.




Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Dynamische Textfeld-Größenanpassung

Beitrag von DPunch »

Servus
balu hat geschrieben:Du hast einfach Recht. Mit oHptDialog funktioniert es auch in der zusätzlichen Bibliothek. Danke für diesen Tipp.
Dieses Ergebnis lässt eigentlich nur eine Schlussfolgerung zu: irgendwo zwischen dem Starten des Dialogs und dem Schliessen verwendest Du offenbar die Variable odlg erneut (bzw: es reicht prinzipiell, dass sie einfach nur woanders nochmal deklariert wird). Aus diesem Grund steht die Variable in odlg.setVisible(False) nicht mehr zur Verfügung.
Daher: gerade bei globalen Variablen unbedingt darauf achten, dass sie eindeutig sind, anstatt generische Namen wie odlg zu verwenden.
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dynamische Textfeld-Größenanpassung

Beitrag von balu »

Hallo DPunch,
Dieses Ergebnis lässt eigentlich nur eine Schlussfolgerung zu:...
Bedenke bitte eins: Das Makro hatte nicht ich erstellt, sondern F3K Total. Schaus dir an, es ist in diesem Thread hier zu finden. Also solltest Du deine Worte mehr an ihn wenden, und nicht so sehr an mich. Aber ich finde momentan in seinem Code keine Stelle wo die Variable odlg weder mehrfach deklariert noch mehfach defeniert wird.

Daher: gerade bei globalen Variablen unbedingt darauf achten, dass sie eindeutig sind, anstatt generische Namen wie odlg zu verwenden.
Ich für meinen Teil habe es mir schon angewöhnt etwas aussagefähigere Namen für z.B. Dialoge einfallen zu lassen. Wie z.B. oALARM oder oFarbDialog. Es kann aber auch mal so etwas dabei rauskommen: oNoVeri.

Nur frage ich mich jetzt auf Grund der von mir vorgegebenen Situation -{zusätzliche Bibliothek}-: Was stößt Calc so sehr an odlg sauer auf? Gegen welches Programmiertechnische Gesetz wird damit verstoßen? Kannst Du mir das eventuell beantworten?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten