Zugriff auf die Beschriftung einer Schaltfläche

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

Moderator: Moderatoren

Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von Jonny1 »

Wie bekommt man mit einem Makro Zugriff auf die Beschriftung einer Schaltfläche?
Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von Jonny1 »

Ich habe es gefunden:

Code: Alles auswählen

thiscomponent.drawpage(0).control.label = "EUREKA!"
Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von Jonny1 »

Also bei weitem viel besser als jedes Handbuch ist es, angefangen mit "thiscomponent" alles mögliche in die Beobachtungsliste der IDE zu stellen und zu recherchieren, bis man die benötigte Unterstruktur gefunden hat. Denn die Handbücher sind zum Verzweifeln. :(

Nur meine Meinung.

Was denkt ihr?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von komma4 »

Besser als der "Beobachter" in der Basic-IDE ist allemal XRay oder MRI
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von Jonny1 »

Danke Winfried.

Gestern habe ich sofort sowohl XRay als auch MRI heruntergeladen und installiert, habe bisher aber keine Zeit gehabt, weiter daran zu arbeiten und weiß deswegen nicht einmal, was das ist und was es bewirkt.

Gianni
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von komma4 »

XRay ist ein Hilfsmittel zur Programmierung.

Lade die Bibliothek

Code: Alles auswählen

GlobalScope.BasicLibraries.loadLibrary( "XrayTools" )
*


Danach kannst Du in Deinem Basic-Code die Objekte und Variablen untersuchen, bspw.

Code: Alles auswählen

xray ThisComponent
xray meineVariable

Suche mal nach Beiträgen mit "Xray" hier imForum. Da ist obiges schon mehrfach beschrieben.

Ich meine, auch Andrews verwendet Xray in seinem Beispiel-Code seines Makro-Dokuments.


Hilft das weiter?


* ungetestet: bin gerade umgezogen, noch nicht auf vollständigem "Hilfsbereit-Level"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Jonny1
***
Beiträge: 55
Registriert: Mi, 12.01.2011 21:49

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von Jonny1 »

Mitte in der Nacht ziehst du um?

Ein wenig habe ich versucht, deine neue Ratschläge umzusetzen, ist es mir aber noch nicht gelungen.

Bisher habe ich folgendes mit der dynamischen Änderung von Schaltflächen und Beschriftungsfeldern erreicht:

Code: Alles auswählen

REM  *****  BASIC  *****

Const rot = 16711680, gruen = 32768, EIN = "EIN", AUS = "AUS", _
	HilfetextEIN = "Befehlsweitergabe EINGESCHALTET. Die grüne Taste drücken, um die Zeitfelder zu bearbeiten.", _
	HilfetextAUS = "Befehlsweitergabe AUSGESCHALTET. Die Zeitfelder können bearbeitet werden. Die rote Taste drücken, um die Befehlsweitergabe einzuschalten."
Global initialisiert as boolean, LabelEIN, LabelAUS, HilfetextEIN, HilfetextAUS as string

Sub Main
	versuche
End Sub

sub Initialisiere
	LabelEIN = "Befehlsweitergabe EINGESCHALTET" & Chr(10) & "Die grüne Taste drücken, um die Zeitfelder zu bearbeiten."
	LabelAUS = "Befehlsweitergabe AUSGESCHALTET. Die Zeitfelder können bearbeitet werden." & Chr(10) & "Die rote Taste drücken, um die Befehlsweitergabe einzuschalten."
	initialisiert = true
end sub

sub SchalteFarbeUm
	if NOT initialisiert then Initialisiere
	if thiscomponent.drawpage(0).control.backgroundcolor = gruen then 
		thiscomponent.drawpage(0).control.backgroundcolor = rot
		thiscomponent.drawpage(0).control.label = AUS
		thiscomponent.drawpage(0).control.helptext = HilfetextAUS
		thiscomponent.drawpage(1).control.label = LabelAUS
	else
		thiscomponent.drawpage(0).control.backgroundcolor = gruen
		thiscomponent.drawpage(0).control.label = EIN
		thiscomponent.drawpage(0).control.helptext = HilfetextEIN
		thiscomponent.drawpage(1).control.label = LabelEIN
	end if
end sub

sub versuche
	Dummy = thiscomponent.drawpage(0).control
	Dummy = thiscomponent.drawpage(0).size
	thiscomponent.drawpage(0).size.width = 4000
	Dummy = thiscomponent.drawpage(2)
	Dummy = thiscomponent.drawpage(2).position
	thiscomponent.drawpage(2).position.x = 3000
end sub
Die Änderung von Beschriftung, Hilfetext und Untergrundsfarbe funktioniert, wie man aus diesem Bild...
2011-01-31_121015.png
2011-01-31_121015.png (6.01 KiB) 2002 mal betrachtet
und aus diesem anderen...
2011-01-31_121127.png
2011-01-31_121127.png (8.36 KiB) 2002 mal betrachtet
... sehen kann.

Die Änderung der Position und der Größe funktioniert aber nicht. Was mache ich da falsch? Oder ist die dynamische Änderung nicht vorgesehen, sondern nur das Lesen?

Eine andere Frage:
Ist es möglich, einen Text wie:

Code: Alles auswählen

"Befehlsweitergabe EINGESCHALTET" & Chr(10) & "Die grüne Taste drücken, um die Zeitfelder zu bearbeiten."
als Konstante zu deklarieren, so, daß man sich die Initialisierung sparen kann?

Vielen Dank

Gianni
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von gogo »

Die Änderung der Position und der Größe funktioniert aber nicht
Auch von mir die Frage: Wo kann man Position und Größe, so eines Labels zumindest auslesen. Beim Objekt (über die Drawpage) ist es nicht gespeichert. Mittels des Event-Objekts geht es, (stardiv.Toolkit.UnoFixedTextControl), aber auf die anderen Label-Kontrollelemente des Formulars konnte ich so nicht zugreifen.

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Zugriff auf die Beschriftung einer Schaltfläche

Beitrag von F3K Total »

Hallo,
hier ein paar Tips:
mit folgender Prozedur bekommt man Zugriff auf alle Elemente der Drawpage:

Code: Alles auswählen

oshapesenum=thiscomponent.drawpage.createEnumeration
while oshapesenum.hasmoreelements
oshape= oshapesenum.nextelement
xray oshape
wend
nun kann man z.B so nach Labelfeldern suchen:

Code: Alles auswählen

oshapesenum=thiscomponent.drawpage.createEnumeration
while oshapesenum.hasmoreelements
oshape= oshapesenum.nextelement
if oshape.control.ServiceName ="stardiv.one.form.component.FixedText" then msgbox oshape.control.name
wend
oder ein Labelfeld per Namen finden:

Code: Alles auswählen

oshapesenum=thiscomponent.drawpage.createEnumeration
while oshapesenum.hasmoreelements
oshape= oshapesenum.nextelement
if oshape.control.name="lblKunden-ID"  then msgbox "X: "+oshape.position.X+" Y: "+oshape.position.Y
wend
oder dem Feld eine neue Position zuweisen:

Code: Alles auswählen

dim oposition as new com.sun.star.awt.Point
oposition.X=5000 '5cm
oposition.Y=5000 '5cm

oshapesenum=thiscomponent.drawpage.createEnumeration
while oshapesenum.hasmoreelements
oshape= oshapesenum.nextelement
if oshape.control.name="txtKunden-ID"  then oshape.position=oposition
wend
Die neue Position ist aber nur dann dauerhaft, wenn das Formular im Bearbeitungsmodus geöffnet wurde und nach der Positionsänderung gespeichert wird.
Geht beides auch per Makro.

Viel Erfolg
Gruß R
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re:Zugriff a. d. Beschriftung/Größe/Position einer Schaltflä

Beitrag von gogo »

Vielen Dank für die Codeschnipsel - ich hatte in der "falschen" Drawpage gesucht.

Hab mich die letzten 2 Tage durch den Code gewühlt, und alles ein bisschen schöner gemacht ;)

Danke auch für den Hinweis, die Position per com.sun.star.awt.Point (und die Größenzuordnung dann per com.sun.star.awt.Size) zu setzen!

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Antworten