Zugriff auf die Beschriftung einer Schaltfläche

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Zugriff auf die Beschriftung einer Schaltfläche

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

von gogo » Do, 03.11.2011 23:39

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

Re: Zugriff auf die Beschriftung einer Schaltfläche

von F3K Total » Mo, 31.10.2011 21:00

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

Re: Zugriff auf die Beschriftung einer Schaltfläche

von gogo » Mo, 31.10.2011 18:44

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

Re: Zugriff auf die Beschriftung einer Schaltfläche

von Jonny1 » Mo, 31.01.2011 12:17

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) 2008 mal betrachtet
und aus diesem anderen...
2011-01-31_121127.png
2011-01-31_121127.png (8.36 KiB) 2008 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

Re: Zugriff auf die Beschriftung einer Schaltfläche

von komma4 » Mo, 31.01.2011 03:47

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"

Re: Zugriff auf die Beschriftung einer Schaltfläche

von Jonny1 » So, 30.01.2011 20:17

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

Re: Zugriff auf die Beschriftung einer Schaltfläche

von komma4 » Sa, 29.01.2011 18:59

Besser als der "Beobachter" in der Basic-IDE ist allemal XRay oder MRI

Re: Zugriff auf die Beschriftung einer Schaltfläche

von Jonny1 » Sa, 29.01.2011 16:25

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?

Re: Zugriff auf die Beschriftung einer Schaltfläche

von Jonny1 » Sa, 29.01.2011 16:11

Ich habe es gefunden:

Code: Alles auswählen

thiscomponent.drawpage(0).control.label = "EUREKA!"

Zugriff auf die Beschriftung einer Schaltfläche

von Jonny1 » Sa, 29.01.2011 14:16

Wie bekommt man mit einem Makro Zugriff auf die Beschriftung einer Schaltfläche?

Nach oben