dialog mit makroaufruf und werteübergabe

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

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

dialog mit makroaufruf und werteübergabe

Beitrag von kannenklaus »

hallo gruppe,

ich habe mir folgenden code erstellt. dieser soll über den dialog gestartet werden und je nach zustand von "cbxZellHintergrund" bzw. "cbxLinien"ausgeführt werden:

Code: Alles auswählen

Sub dlgStarten
DialogLibraries.LoadLibrary("Standard") 
Dim oDlg as Object
Dim oDoc as Object
Dim oBereich as Object
Dim RgbRotZelle as Long, RgbGelbZelle as Long, RgbBlauZelle as Long
'--Controller wird für den ausgewählten Zellbereich erzeugt
	oDoc = ThisComponent
	oBereich = oDoc.getCurrentSelection()'.getRangeAddress()
'	oBereich.clearContents(32)'löscht alle Formate

oDlg=CreateUnoDialog(DialogLibraries.Standard.dlgLinien) 'Dialog anlegen 
oDlg.execute() 

'---prüft, ob "Zellhintergrund einfärben" Häkchen drin ist
If oDlg.getControl("cbxZellHintergrund").state = true then
	
'--RGB-Werte des Dialogs werden für den Zellhintergrund an Variablen ausgelesen
	RgbRotZelle = oDlg.getControl("numRotZelle").value
	RgbGelbZelle = oDlg.getControl("numGelbZelle").value
	RgbBlauZelle = oDlg.getControl("numBlauZelle").value
	oBereich.CellBackColor = RGB(RgbRotZelle, RgbGelbZelle, RgbBlauZelle)	

'---prüft, ob "Linienstärke und -farbe" ein Häkchen drin ist
ElseIf oDlg.getControl("cbxLinien").state = true then
	Call TabelleFormatieren'bei Häkchen wird das Makro Zellhintergrund aufgerufen 	

MsgBox("1","2")
End if

End Sub

sowohl cbxZellHintergrund mit folgendem code als auch cbxLinien mit verweis auf das makro TabelleFormatieren werden nicht ausgeführt, ohne dass ich einen fehler erkennen kann.

wo liegt der hund begraben?

freue mich auf eine antwort.

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

Beitrag von Stephan »

wo liegt der hund begraben?
Ich hoffe nicht schon hier, aber trotzdem:
Soll das ein Makro sein?

Falls ja ist doch aber bei:

Code: Alles auswählen

oDlg.execute()


zunächst Schluß und der Dialog wartet auf Interaktion. Und falls andererseits keine Interaktion erfolgen soll wozu dann ein Dialog?


Du müßtest bitte erklären was Du machen willst/was geschehen soll.


Gruß
stephan
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stephan,
Du müßtest bitte erklären was Du machen willst/was geschehen soll.
ich will einen dialog aufrufen, der in einem vorher markierten zellbereich
- die linienstärke außen/innen und
- den zellhintergrund als rgb-wert festlegt.

die entscheidung, ob es nur linien oder der zellhintergrund sein sollen, wird über
- cbxZellHintergrund
- cbxLinien

getroffen. für die übergabe der werte muss in den dialog ausführen.

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

Beitrag von Stephan »

für die übergabe der werte muss in den dialog ausführen.
Naja, dann ebend den Dialog aufrufen und die Einstellungen machen und dann mittels Code den Dialog beenden und die Einstellungen auslesen.
Also vielleicht üblicherweise diesen Code einer OK-Schaltfläche zuordnen.

Also im Prinzip:

Code: Alles auswählen

Dim oDlg as Object 
Dim RgbRotZelle as Long, RgbGelbZelle as Long, RgbBlauZelle as Long 

Sub dlgStarten 
DialogLibraries.LoadLibrary("Standard") 
Dim oDoc as Object 
Dim oBereich as Object 
'--Controller wird für den ausgewählten Zellbereich erzeugt 
   oDoc = ThisComponent 
   oBereich = oDoc.getCurrentSelection()'.getRangeAddress() 
'   oBereich.clearContents(32)'löscht alle Formate 
oDlg=CreateUnoDialog(DialogLibraries.Standard.dlgLinien) 'Dialog anlegen 
oDlg.execute()
End Sub

Sub auslesen()
If oDlg.getControl("cbxZellHintergrund").state = true then 
    
'--RGB-Werte des Dialogs werden für den Zellhintergrund an Variablen ausgelesen 
   RgbRotZelle = oDlg.getControl("numRotZelle").value 
   RgbGelbZelle = oDlg.getControl("numGelbZelle").value 
   RgbBlauZelle = oDlg.getControl("numBlauZelle").value 
   oBereich.CellBackColor = RGB(RgbRotZelle, RgbGelbZelle, RgbBlauZelle)    

'---prüft, ob "Linienstärke und -farbe" ein Häkchen drin ist 
ElseIf oDlg.getControl("cbxLinien").state = true then 
   Call TabelleFormatieren'bei Häkchen wird das Makro Zellhintergrund aufgerufen     

MsgBox("1","2") 
End if


oDlg.EndExecute()


End Sub

(alles nicht getestet)


Gruß
Stephan
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stephan,
Sub dlgStarten und Sub auslesen()
jeweils beides auf den ok-button gelegt; leider ohne erfolg. hast du eine idee?
oder sollte man in so einem fall anders vorgehen?

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

Beitrag von Stephan »

Oh, Sorry.

Nein, Nein.

Nur dlgStarten ausführen (über Menü, Schaltfläche, Makro-Organiser etc.), dann siehst Du den Dialog.
Dort nun die Einstellungen so machen wie gewünscht und dann z.B. mit OK das andere Makro starten. (d.h. das Makro muß bevor Du den Dialog startest bereits der entsprechenden OK-Schaltfläche im Dialog zugeordnet werden, im Dialogeditor im Eigenschaftenmenü der Schaltfläche)


Gruß
Stephan
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stefan,


Nur dlgStarten ausführen
nun läuft`s. :lol:
dank dem buch von t.krumbein habe ich noch einen fehler entdeckt. im fall der checkbox ist die state-eigenschaft nicht als true sondern über werte auszugeben:

0 nicht ausgewählt
1 ausgewählt
2 unbestimmt

nochmals danke für deine unterstützung.

gruß
klaus
Antworten