Dialog "PushButtonType" ändern

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Dialog "PushButtonType" ändern

Beitrag von clag »

Hallo Kenner und Könner,

bastle immer noch mit den Dialogen.

ich versuch bisher erfolglos von einer im Dialog platzierten Schaltfläche
den "PushButtonType" von 0= Standard auf 1=OK zu ändern
das setzen der 1 gelingt mir mit

Code: Alles auswählen

if nCount+3 > nLastQ then 
'xray event.source

		myButton6.model.BackgroundColor = RGB(255,128,32)
		myButton6.model.PushButtonType = 1
		myButton6.model.Label = "OK fertig und beenden"
end if

aber die Schaltfläche ändert nicht wie von mir erwartet beim nächsten anklicken ihr Verhalten
von
Standard = ausführen des angegebenen Makros
auf
OK = beenden des Dialogs

was muss ich tun damit diese Änderung des PushButtonType von Standard auf OK
sich beim nächsten klick auf diesen Button auch Wirkung zeigt?

zZ wird obwohl PushButtonType=1 das hinterlegte Makro ausgeführt ?

ich möchte erreichen, das nach n klicks auf den "Weiter Button" Dieser dann zum "Beenden Button" mutiert
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Dialog "PushButtonType" ändern

Beitrag von mikeleb »

Hallo clag,

ich bin mir nicht sicher, wie der Status intern behandelt wird, sprich: ob der Status "OK" Vorrang vor dem verknüpften Makro hat.
Als workaround könntest du in deinem Makro den Text der Schaltfläche abfragen, und dann entweder den Dialog schließen oder das "bisherige" Makro laufen lassen.
Gruß,
mikeleb
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dialog "PushButtonType" ändern

Beitrag von clag »

Hallo mikeleb,

erst einmal ein danke für deine Antwort,
na klar kann man da andere Wege gehen um das von mir angestrebte Verhalten zu erreichen.

So wie ich es versucht habe erschien es mir einfach und direkt, darum bin ich verwundert, das es nicht so tut wie gedacht.
Und nun ich würde gern herausfinden was ich da falsch interpretiere oder übersehe.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog "PushButtonType" ändern

Beitrag von balu »

Hallo clag,

ich weiß nicht ob man im laufenden Betrieb des Makros bei einem CommanButton den Status PushButtonType ändern kann, habe es nicht getestet. Vielleicht muss man dazu das Makro neu starten, was ich aber auch nicht getestet habe.

ich möchte erreichen, das nach n klicks auf den "Weiter Button" Dieser dann zum "Beenden Button" mutiert
Wenn ich das so lese, würde ich dir einen "Seitenzähler a-la Dannenhöfer" empfehlen:
4.1.6 Wie kann man mehrseitige Dialoge erstellen?


na klar kann man da andere Wege gehen um das von mir angestrebte Verhalten zu erreichen.
Manchmal ist das der einzige Weg der bleibt, auch wenn er offensichtlich der unbequemere ist.



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
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dialog "PushButtonType" ändern

Beitrag von clag »

Hallo Balu,

ja auch dir ein Danke für deine Antwort und Info.

Es sieht wohl so aus, das nur die Teile der graphischen Eigenschaften während der Laufzeit geändert werden, die geänderten funktionalen Eigenschaften scheinbar nicht.
meine Idee zwei gleiche Button übereinander zu legen und abwechselnd ein und auszublenden

Code: Alles auswählen

myButton6.model.EnableVisible = false 
myButton8.model.EnableVisible = true 
funktioniert leider auch nicht

da bleibt wohl tatsächlich nur noch
ein IF Konstrukt mit

Code: Alles auswählen

if x=x then 
Dlg.endDialog(1)
wie von dir schon angedeutete der etwas aufwendigere/unbequemere Weg
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dialog "PushButtonType" ändern

Beitrag von balu »

Hallo clag,
clag hat geschrieben: meine Idee zwei gleiche Button übereinander zu legen und abwechselnd ein und auszublenden

Code: Alles auswählen

myButton6.model.EnableVisible = false 
myButton8.model.EnableVisible = true 
funktioniert leider auch nicht
Also zumindest bei mir funktioniert deine Idee schon, hab sie schon mehrfach angewendet, jedoch mit einem dicken fetten

ABER!!

Die Sichtbarkeit wird nicht über das Model angesprochen, sondern über das Control direkt. Mit anderen Worten

Code: Alles auswählen

myButton6.Visible = false 
myButton8.Visible = true 
Vorausgesetzt myButton.. ist wie folgt defeniert

Code: Alles auswählen

myButton6 = oHauptDialog.getControl("CommandButton6")
oHauptDialog ist natürlich durch deine Dialog defenition zu ersetzen.

Nicht alles wird über das Model geregelt, vieles geht direkt über das Control. Musst Du im Einzelfall halt untersuchen.

Viel Spaß und Erfolg :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
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dialog "PushButtonType" ändern

Beitrag von clag »

Moin Balu,

Danke für deinen Spätschicht Beitrag.

Deine Beschreibung hat mich auf jeden Fall dem Ziel näher gebracht.
Weil ich erneut probiert habe wie es mit der Eigenschaft "Visible" möglich ist die Buttons zu auszublenden.

Dabei ist mir aufgefallen; beide Varianten

Code: Alles auswählen

myButton6.Visible = false 
myButton6.model.EnableVisible = false 
tun was sie sollen, wenn die Eigenschaft vor dem

Code: Alles auswählen

myDialog.execute 
schon einmal angesprochen wurde.

Oder eben auch nicht wenn sie erstmalig nach "myDialog.execute" angesprochen werden.

Leider gilt das Verhalten nicht für die Eigenschaft "PushButtonType" soweit ich das bisher beurteilen kann.
Aber vielleicht gehen mir ja noch das eine oder andere Licht auf.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Dialog "PushButtonType" ändern

Beitrag von mikeleb »

Hallo,
ich habe nun auch mal hin und her probiert.
Dabei habe ich ebenfalls festgestellt, dass die PushButtonType-Eigenschaft zwar per Makro gelesen und geschrieben werden kann, aber an der Wirkung des Buttons sich dadurch nichts ändert (warum auch immer).
Über einen Umweg ist es mir nun gelungen. Ich kopiere den Button (als Objekt), ändere die Eigenschaft, lösche den Button (aus dem Dialog) und setze den geänderten wieder ein.

Code: Alles auswählen

oDlgm=oHauptDialog.getmodel()
oMod=oHauptDialog.getControl("CommandButton6").model
oMod.setPropertyValue("Label","Ok fertig und beenden")	
oMod.setPropertyValue("PushButtonType",com.sun.star.awt.PushButtonType.OK)
oDlgm.removebyname("CommandButton6")
oDlgm.insertbyname("CommandButton6", oMod)
oHauptDialog.setmodel(oDlgm)

Schau mal, ob es so klappt.
Gruß,
mikeleb
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dialog "PushButtonType" ändern

Beitrag von clag »

Hallo mikeleb,

Danke für deine Gegenprobe.

Dein Vorschlag funktioniert auch auch hier in meinem Dialog Basic-Konstrukt.

Allerdings ist später vielleicht nicht mehr so deutlich warum diese Aktion durchgezogen wird.
So ist es vielleicht doch einfacher und vor allem später auch einfacher in Code nachvollziehbar
nur den Label-String zu ändern und dann diesen abzufragen (deine erste Antwort) und ein normales

Code: Alles auswählen

myDialog.endDialog(1)
anwenden.

Leider ist mir immer noch nicht klar, warum die Dialogelemente so unterschiedlich reagieren,
wenn deren Eigenschaften geändert werden.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Dialog "PushButtonType" ändern

Beitrag von mikeleb »

Hallo clag,

die PushButtonType-Eigenschaft scheint schon etwas besonderes zu sein. Ich vermute mal, dass es mit der Erstellung des Dialogs zusammenhängt. Auf "meine" Lösung bin ich erst gekommen nachdem ich mir angesehen habe, wie man einen Dialog während der Laufzeit eines Makros erstellt. Dabei ist die Besonderheit, dass auch die Listener eigenhändig erzeugt werden müssen, damit beim Klick auf einen Button überhaupt etwas passiert.
Ich reime mir das jetzt mal so zusammen, dass beim Design eines Dialogs per IDE und speziell eines Buttons die entsprechenden Listener (für den jeweiligen Status) vorbereitet werden.
Beim Erstellen des Dialogs (createunodialog ...) wird nun aus der Vorlage in der Bibliothek ein Model mit eben diesen Listenern gebaut. Um den PushButtonType eines Buttons zu ändern, müsste neben des Typs auch der Listener umgeschrieben werden und das scheint nur (automatisch) zu gehen, wenn ein neues Model des Dialogs erzeugt wird. Noch schwieriger scheint mir das umgekehrte Problem: Ein Button ist als OK-Button definiert und soll während der Laufzeit in "Standard" wechseln - ich habe nichts (Einfaches) gefunden, um per Makro dem Button-Klick nun ein Makro zuzuordnen.
(aber so ganz schlüssig scheint es mir trotzdem nicht :?)
Gruß,
mikeleb
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Dialog "PushButtonType" ändern

Beitrag von clag »

Hallo mikeleb,

also ich finde deine Erklärung hört sich schon ganz logisch an.
Andererseits ist ein Listener doch eigentlich nur für das erkennen einer "action" zuständig und den "trigger" danach,
was dadurch ausgelöst wird ist zumindest aus meiner Sicht, schon ein zweiter Schritt,
hier nämlich "PushButtonType" 0, 1 ,2 oder 3.

Allerdings bin ich eher nur übender Anwender in Basic, tiefere Einsichten in Basic fehlen mir,
darum auch meine "Dialog" Versuche und Fragerei hier.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten