Seite 2 von 4

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 15:44
von marcel_at_work
Man...... so ein Mist. DAS muß man erstmal wissen! :lol:

Herzlichen Dank und viele liebe Grüße,

Marcel

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 15:50
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 15:56
von F3K Total
Wenn man nicht

Code: Alles auswählen

Option Explicit
definiert, braucht man nix zu deklarieren.

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 15:58
von marcel_at_work
Machst du das dann immer so? Als ich mich damals in OOo reinlas, dachte ich, das wäre Standard?

LG

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 16:03
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 16:10
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 19:29
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 19:56
von F3K Total
Hallo Balu,
hast Du den TopWindowListener und die erforderlichen Subs mitgenommen?
Listener.png
Listener.png (13.24 KiB) 3059 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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 22:12
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 22:52
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 23:18
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: Sa, 12.10.2013 23:31
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 ;)

Re: Dynamische Textfeld-Größenanpassung

Verfasst: So, 13.10.2013 00:37
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

Re: Dynamische Textfeld-Größenanpassung

Verfasst: So, 13.10.2013 00:58
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.

Re: Dynamische Textfeld-Größenanpassung

Verfasst: So, 13.10.2013 02:07
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