Seite 1 von 1

Blanko Basic-Dialog einfügen

Verfasst: Sa, 12.05.2012 01:47
von balu
Hallo Basic-Freunde,

ich habe da mal wieder ein kleines Problem, hoffe ich zumindest.

Wie ich Basic-Module einfügen kann, weiß ich mittlerweile. Und das geht auch recht einfach.

Code: Alles auswählen

Sub ModulEinfuegen
If ThisComponent.BasicLibraries.hasByName( "Standard" ) Then
	myLib = ThisComponent.BasicLibraries.getByName( "Standard" )
	moduleText = "REM  *****  BASIC  *****"   
	mylib.insertbyname("ModuName1", moduleText)	
end if
End Sub
Wie das funktioniert versteh ich. Aber das gleiche Verfahren kann ich nicht anwenden, wenn ich einen Blanko Dialog einfügen will.

Code: Alles auswählen

Sub DialogEinfuegen
If ThisComponent.DialogLibraries.hasByName( "Standard" ) Then
	myDlg = ThisComponent.DialogLibraries.getByName( "Standard" )
	modulText = "REM  *****  BASIC  *****"   
	myDlg.insertbyname("ModuDialog", modulText)	
end if
End Sub
Das schmeißt mir in der Zeile bei myDlg.insertbyname einen Fehler raus.
IllegalArgumentException
Und ich würd wohl auch sagen das das daran liegt, das ich im Dialog keinen Text als Parameter mit geben kann, gar so wie bei Basic-Modul.
XRAY sagt mir wohl folgendes für insertByName.

Code: Alles auswählen

insertByName ( aName as string, aElement as any )
Den 1. Parameter versteh ich, das ist der Name. Aber mit dem 2. kann ich jetzt für Dialog nix mit anfangen. Was müsste ich jetzt als 2. Parameter angeben?
Sinngemäß müsste der Hinweistext ja in ungefähr so lauten: "Ein Element als irgendwas!?" Oder was soll ich mir darunter vorstellen?

Oder bin ich mal wieder aufm falschen Dampfer, und ich muss einen ganz anderen Weg gehen?

Würde mich freuen wenn mir wer helfen kann.



Gruß
balu

Re: Blanko Basic-Dialog einfügen

Verfasst: Sa, 12.05.2012 06:31
von komma4

Code: Alles auswählen

   oDialogModel = createUnoService( "com.sun.star.awt.UnoControlDialogModel" ) 
   ' Initialize the dialog model's properties. 
   oDialogModel.PositionX = x 
   oDialogModel.PositionY = y 
   oDialogModel.Width = width 
   oDialogModel.Height = height 
   oDialogModel.Title = cTitle 

   oDialogControl = createUnoService( "com.sun.star.awt.UnoControlDialog" ) 
   oDialogControl.setModel( oDialogModel ) 
entnommen aus:
DannyB zum Erstellen eines Dialogs "on the fly":
http://www.oooforum.org/forum/viewtopic ... 1765#11765


Hilft Dir das weiter?

Re: Blanko Basic-Dialog einfügen

Verfasst: Di, 15.05.2012 13:21
von balu
Hallo Winfried,

erstmal Danke für deine Antwort.
Hilft Dir das weiter?
Leider nein.
Den verlinktehn Thread hatte ich letztes Jahr auch schon mal gefunden, und ihn mir praktisch angeschaut um selber zu erleben wie Umfangreich und Komplex es sein kann einen sehr umfangreichen Dialog "on the fly" zu erstellen. Gott sei Dank musste ich mich da nicht mehr weiter mit befassen.

Um es noch mal deutlich hervorzuheben, mir geht es nicht um ein "On the fly Dialog", sondern einen leeren Blanko Dialog in der IDE. Also rechtsklick auf ein
->Basic-Modul Reiter
->Einfügen
->Basic-Dialog.

Und das hatte ich auch mal gemacht, und dann die Datei gespeichert, entzippt, und mir dann die Dialog1.xml angeschaut. Die dann so aussieht.

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="Dialog1" dlg:left="243" dlg:top="84" dlg:width="220" dlg:height="167" dlg:closeable="true" dlg:moveable="true"/>
Die Angaben in deinem Codeschnipsel finde ich in ähnlicher Form dort auch wieder.
dlg:left="243" => .PositionX
dlg:top="84" => .PositionY
dlg:width="220" => .Width
dlg:height="167" => .Height

Das was neben => steht müssten dann wohl theoretisch die Properties sein.

Mit

Code: Alles auswählen

xray ThisComponent.DialogLibraries.getByName("Standard").ElementNames
bekam ich für dlg:id="Dialog1" den Namen der auf dem Reiter zu lesen ist. Jedoch finde ich momentan mit xray einfach nicht die Größe und Position des Dialog. Möchte aber dafür wetten das ich da den falschen Weg gehe, wenn ich ThisComponent.DialogLibraries untersuche.


Ich hatte deinen Codeschnipsel auch praktisch angewendet, aber es wurde kein Dialog eingefügt, was ja verständlich ist. Also hatte ich versucht mit xray das mal zu untersuchen, um eventuell irgendwo einen Anhaltspunkt zu finden um aus "on the fly" einen echten zu machen. Aber leider würde ich nicht fündig.

Und ich hatte es auch nicht geschafft die Angaben des Schnipsel als Struct in

Code: Alles auswählen

insertByName ( aName as string, aElement as any )
reinzubekommen.


Ich seh vor lauter Bäume den Wald nicht mehr!
Ist denn der Weg über

Code: Alles auswählen

ThisComponent.DialogLibraries.getByName("Standard").insertByName(?????)
der total Falsche, oder muss ich doch irgendwie über createUnoService das in Angriff nehmen? Das Dumme ist nur, ich versteh weder das eine, noch das andere so richtig.


Falls jetzt jemand sich denkt das sich meine Worte mehr als verwirrend anhören, so hat er recht. Denn ich bin mehr als nur verwirrt.


Wer kann mir noch irgendwie helfen?



Gruß
balu