[gelöst] Makro sucht "Aufrufer"

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

Moderator: Moderatoren

Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

[gelöst] Makro sucht "Aufrufer"

Beitrag von oktobaer »

Hallo!

Situation:
- In einem Dialaog gibt es u.a. zwei Textfelder (TF1 und TF2)
- jedes Textfeld ruft bei Änderung das selbe Makro (SUB Test) auf

Frage:
Wie kann das Makro wissen von welchem Textfeld der Aufruf kam um im entsprechenden Textfeld etwas veranlassen?

Vielleicht könnt Ihr mir helfen, denn ich weiß nicht mal wonach ich recherchieren soll ;-(

Vielen Dank!

Oktogrüße
Zuletzt geändert von oktobaer am So, 25.01.2009 21:56, insgesamt 1-mal geändert.
Servus
Claus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro sucht "Aufrufer"

Beitrag von turtle47 »

Hi Oktobaer,

erstelle Dir für jedes Textfeld eine Hilfs_Sub welches Du von der jeweiligen Textbox aus ansprichst.
In der Hilfs_Sub wird die die Variable mitgegeben und das Stamm_Makro aufgerufen.

Code: Alles auswählen

Dim InfoTextfield as string
Sub Hilfs_Sub_1 'Wird von Textfeld1 angesprochen
	InfoTextfield = "Ich bin Textfeld1" ' Variable mitgeben
	Stamm_Makro 'Stamm_Makro aufrufen
End Sub

Sub Hilfs_Sub_2 'Wird von Textfeld2 angesprochen
	InfoTextfield = "Ich bin Textfeld2" ' Variable mitgeben
	Stamm_Makro ' Stamm_Makro aufrufen
End Sub

Sub Stamm_Makro
	msgbox InfoTextfield
	' .............. Dein weiterer Code
End Sub
Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: Makro sucht "Aufrufer"

Beitrag von oktobaer »

Hallo Jürgen!

Ja, so ähnlich habe ich es auch angedacht!
Wenn es jedoch mehr Felder werden wird das schnell unübersichtlich.

Dachte vielleicht könnte man irgendwie überprüfen welches Textfeld gerade aktiv ist->
gibt es sowas wie "getfocus"?

Danke für den Tipp!

Oktogrüße
Servus
Claus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro sucht "Aufrufer"

Beitrag von turtle47 »

Hi Oktobaer,
oktobaer hat geschrieben:gibt es sowas wie "getfocus"?
So ähnlich:

Code: Alles auswählen

myControlfield.hasFocus
Beigefügt mal eine Beispieldatei in der die Textfelder bei Fokuserhalt mit Text gefüllt werden.
Der Clou an der Sache ist, dass man noch nicht mal den Namen des Textfeldes kennen muss
und auch die Anzahl ist "beliebig". :lol:

Viel Spass damit.

Jürgen
Dateianhänge
Focus_Textfield.ods
(11.25 KiB) 82-mal heruntergeladen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: Makro sucht "Aufrufer"

Beitrag von oktobaer »

Hallo Jürgen!

Es kommt etwas Licht in mein Dunkel! ;-)

Code: Alles auswählen

Sub Auloeser_Kontrollfeld
	oFieldSet = oDlg.getControls
	For i = LBound(oDlg.Model.controlModels) to UBound(oDlg.Model.controlModels)
	FieldName = oFieldSet(i).Model.Name
	myControlfield = oDlg.getControl(FieldName)
	if myControlfield.hasFocus = True then
	myControlfield.Text = FieldName & "Erhaltener Focus = "  & x
	x = x + 1
	exit sub
	end if
	Next i
	x = x + 1
End Sub
Ich überlege noch was "LBound(oDlg.Model.controlModels)" bzw. UBound(oDlg.Model.controlModels)" bewirkt - aber vermutlich fragst Du damit ab wieviele Felder bzw. Boxen vorhanden sind. Anschließend geht das Makro der Reihe nach durch und prüft solange wer den Focus hat, bis der Spitzbube entdeckt ist! Klasse!

Vielen Dank für die Lösung!!

Oktobaer
Servus
Claus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makro sucht "Aufrufer"

Beitrag von turtle47 »

Hallo Oktobaer,

na, dann muss ich ja meine Sonnenbrille aufsetzen. 8)

Genau so wie du das beschrieben hast läuft das Ganze ab. Hast Deine Hausaufgaben gut gemacht. :D

Code: Alles auswählen

x = x + 1
hatte ich mit eingebaut, um zu zeigen, das mal die Routine mehrmals aufrufen kann und dabei gezählt wird.
Also nur eine reine Spielerei von mir.

Die vorletzte Zeile

Code: Alles auswählen

x = x + 1
ist natürlich überflüssig und kann gelöscht werden. :(

Aber Du wirst den Code ja sowieso noch auf Deine Bedürfnisse anpassen.

Bis denne.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: [gelöst] Makro sucht "Aufrufer"

Beitrag von oktobaer »

Prima!

Eine Frage habe ich noch: Woher weißt Du, dass es "hasFocus" gibt?
Gibt es da eine Dokumentation wo ich sehen kann, dass es diese oder auch andere, vielleicht für mich in Zukunft nützliche, Eigenschaften gib?

... und was "oDlg.Model.controlModels" exakt tut!?


Danke!

OktoGrüße
Servus
Claus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [gelöst] Makro sucht "Aufrufer"

Beitrag von turtle47 »

Nabend Oktobaer,
oktobaer hat geschrieben:Woher weißt Du, dass es "hasFocus" gibt?
Hat Dir noch keiner Dir Xray empfohlen?
Ein echt tolles Tool zum untersuchen der Objekte Methoden und Eigenschaften. Dazu brauchst Du dann noch das SDK (Software Development Kit).
Im Moment funktioniert der Download leider nicht sollte aber bald wieder gehen.
oktobaer hat geschrieben:... und was "oDlg.Model.controlModels" exakt tut!
Vielleicht findet sich hier ja ein Spezialist, der Dir die Frage beantworten kann.
Bin doch nur ein kleiner Hobbyprogger.

Guts Nächtle.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten