[Gelöst] Aktuelles Steuerelement ermitteln [CALC]?

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

Moderator: Moderatoren

Benutzeravatar
womolbo
**
Beiträge: 26
Registriert: So, 12.04.2020 12:43

[Gelöst] Aktuelles Steuerelement ermitteln [CALC]?

Beitrag von womolbo »

Hallo,
kann mir jemand auf die Schnelle sagen wie man das aktuelle Steuerlement [Fokus] in einem Dialog ermittelt?

Ich nahm an, es müßte eine Eigenschaft/Methode des Dialogs sein, konnte aber leider [Xray] nichts passendes finden.

Danke
Zuletzt geändert von womolbo am Mi, 10.06.2020 11:22, insgesamt 1-mal geändert.
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Aktuelles Steuerelement ermitteln [CALC]?

Beitrag von Stephan »

Also ich würde einfach alle Steuerelemente prüfen bis ich das finde welches den Fokus hat, z.B. so:

Code: Alles auswählen

For i = 0 To UBOUND(DeinDialog.Controls)
	If DeinDialog.Controls(i).hasFocus = True Then
		Msgbox "" & DeinDialog.Controls(i).Model.Name & """ hat den Fokus."
		Exit For
	End If
Next i

Gruß
Stephan
Benutzeravatar
womolbo
**
Beiträge: 26
Registriert: So, 12.04.2020 12:43

Re: Aktuelles Steuerelement ermitteln [CALC]?

Beitrag von womolbo »

@Stephan:
Hallo Stephan, danke für die schnelle Hilfe.
Ich habe es 'befürchtet'. Wieso muß man für,
meiner Empfindung nach derart elementare
Fragen, so oft eigene 'Routinen' schreiben!!?
Und es es ja nicht immer derart kurzer und
intuitiver Code.
Da verfügen die Objekte über etliche Eigenschaften
und Methoden aber solch grundlegende Fragen
müssen dann n Programmierer in m Fällen
jedes mal extra codieren.

Gruß
Vjeko
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Aktuelles Steuerelement ermitteln [CALC]?

Beitrag von Stephan »

Wieso muß man für,
meiner Empfindung nach derart elementare
Fragen, so oft eigene 'Routinen' schreiben!!?
Vielleicht nur weil Deine Implementierung unzweckmäßig ist? z.B. wenn das Steuerelement das den Fokus hat ohnehin das Steuerelement ist bei dem ein Ereignis ein Makro auslöst, welches die Information braucht von welchem Steuerelement es ausgelöst wurde, kann man diese Information auch direkt aus der Rückgabe des auslösenden Ereignisses gewinnen:

Code: Alles auswählen

Sub DeinMakro(event)
	Msgbox "" & event.Source.Model.Name & """ hat den Fokus."
End Sub
Dieses Makro wird, trotz des Parameters "event", ganz normal in den Eigenschaften des Steuerelements zugeordnet. Typischer Anwendungsfall sind viele gleiche Steuerelemente die dasselbe Makro benutzen sollen, aber wo sich die Aktion des Makros immer darauf anpassen soll von welchem Steuerelement es ausgelöst wurde.


Gruß
Stephan
Benutzeravatar
womolbo
**
Beiträge: 26
Registriert: So, 12.04.2020 12:43

Re: Aktuelles Steuerelement ermitteln [CALC]?

Beitrag von womolbo »

@Stephan:
Das Codefragment ist super. Dieses Thema stand auch schon auf meiner Liste,
die es zu klären gilt. Nun bist Du mir zvorgekommen. Danke.

Du hast schon Recht, dass oft genug die Implementierung besser sein könnte.
Keine Frage. Nichtsdestotrotz wundere ich mich weiter.
Mit dem gleichen Argument wäre dann auch die Eigenschaft .hasFocus obsolet.

Aber, was solls ich will mich nicht gar beschweren, sondern nur etwas wissen, was
es anscheinend so gar nicht gibt.
Mir ist immer bewußt, dass LibereOffice mir kostenlos zur Verfügung gestellt
wird und das außerdem auf einem sehr hohem funktionalen Niveau.
Meine Fragen zielen gar nicht so sehr darauf ab einen Code zum Laufen zu bringen,
das kann man fast immer irgendwie hinpfuschen, meistens möchte ich mein
Verständnis des Systems erweitern/vervollständigen und auch Dank Euerer Hilfe
wird das auch tatsächlich immer besser.

Dir einen schönen Tag noch
Vjeko
LibreOffice Portable 6.3.5.2 (x86), Windows 7
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [Gelöst] Aktuelles Steuerelement ermitteln [CALC]?

Beitrag von Stephan »

Du hast schon Recht, dass oft genug die Implementierung besser sein könnte.
Keine Frage. Nichtsdestotrotz wundere ich mich weiter.
Mit dem gleichen Argument wäre dann auch die Eigenschaft .hasFocus obsolet.
Mein Hinweis auf die Frage der Implementierung war nur pragmatisch und verfolgte nicht die Absicht das Programm zu verteidigen.

Die Situation in Bezug auf eine möglichst gute/zweckmäßige Umsetzung im Programm ist praktisch bestimmt durch:

bei LO:
-------
die Interessen der maßgeblich beteiligten Firmen (weil sie die meisten der Programmierer stellen und deshalb die Macht haben sich durchzusetzen)

bei AOO:
--------
die Interessen der beteiligten Programmierer (die nur ein Teil der Projektbeteiligten sind)


In beiden Projekten gibt es keinen verbindlichen Weg wie Du als Außenstehender Einfluss nehmen könntest, wenn die Beteiligten nicht freiwillig bereit sind Dein Anliegen auf Programmverbesserung aufzugreifen.
Weil LO über erheblich mehr Programmierer verfügt ist die Chance mit Änderungswünschen Gehör zu finden höher als bei AOO (bzw. die Chance der praktischen Umsetzung, denn zuhören wird man Dir auch bei AOO). Problem von LO ist das durch ständige Änderungen auch relativ viele (neue) Fehler ins Programm kommen, Problem von AOO ist die Langsamkeit der Weiterentwicklung.
Mir ist immer bewußt, dass LibereOffice mir kostenlos zur Verfügung gestellt
wird
Ich war noch nie der Meinung das das eine Entschuldigung für Versäumnisse ist, weder bei einst OOo noch heute bei AOO/LO. (Naja, zugegeben argumentiere auch ich manchmal so, wenn mir Fragen lästig werden, aber meiner wirklichen Meinung entspricht das nicht.)

Ich würde, aufgrund meiner Erfahrungen, inzwischen sogar sagen das die Anwender der Programme sich bewusst werden müssten, das es an ihnen ist Dinge einzufordern die sie brauchen und sich hierbei nicht damit zufrieden zugeben, was ihnen diesbezüglich die Projekte 'gestatten' (also weitestgehend Fehlermeldungen und Featurewünsche einzureichen), sondern das man aktiv Einfluss nehmen müsste, z.B. indem man Geld sammelt und die Entwicklung der Programme mitbezahlt und dabei den Schwerpunkt auf Dinge legt die den Anwendern wirklich wichtig sind.



Gruß
Stephan
Antworten