🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

(Gelöst) Wieder mal blöd

Alles zur Programmierung im LibreOffice.
Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

(Gelöst) Wieder mal blöd

Beitrag von Atwist » Mo 3. Okt 2016, 19:39

Habe gestern schon mal eine blöde Frage gestellt http://www.libreoffice-forum.de/viewtop ... =6&t=16748
Und muss heute dass wieder machen ich krieg es einfach nicht hin ich denk zufiel in die VBA Sprache was mir Gans gut ab ging.
Aber wie kann ich einen Button ein und aus schalten (enable and disable) hab es versucht über die Makro Aufnahme.
Was ich will ist dass wenn ich auf der Button drucke und die Makro ist Ausgeführt dann muss der Button Ausgeschaltet (disable) werden.

Gerne einen Tipp habe schon die Tool MRI aber da komm ich noch nicht mit klar.
Zuletzt geändert von Atwist am Mi 26. Okt 2016, 13:43, insgesamt 1-mal geändert.
Schöne grüße aus Emsland

Andreas

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Wieder mal blöd

Beitrag von craig » Mo 3. Okt 2016, 20:02

Hallo,

ich freue mich, dass Du meinem Rat gefolgt bist und unter der richtigen Rubrik postest.
Nun wäre es für alle Suchenden und Helfenden von großem Nutzen, wenn Du noch
einen passenden Titel wählen würdest:
statt
Wieder mal blöd

z.B.
Makro Calc Button ein- und ausschalten

Wenn jetzt jemand googelt findet er diesen Beitrag und der Person wurde auch damit geholfen.
OK :?:

Nun habe ich zu Deiner Frage, noch Fragen:
  1. Befindet sich der Button auf einem Dialog oder in einem Dokument?
  2. Wenn in einem Dokument in welchem: CALC oder WRITER oder usw.?
Gruß

Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

balu
* LO-Experte *
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: Wieder mal blöd

Beitrag von balu » Mo 3. Okt 2016, 20:54

Hallo Atwist,

Du hast in dem anderen von dir verlinkten Beitrag folgendes gesagt.
Habe meinen Fehler entdeckt, ich habe jedes mal A1, B9, B10 und B11 als Zelle Verweisung benutzt statt 0,0 , 1,9 usw.

Das war Blöd von mir (denk noch zu viel in VBA).
Und jetzt sagst Du.
ich denk zufiel in die VBA Sprache was mir Gans gut ab ging.
Und irgendwie kann ich mir nicht so wirklich vorstellen das Du richtig in VBA programmiert hast. Denn dann wüsstest Du, das man auch in VBA-Excel mindestens 2 möglichkeiten hat eine Zelle anzusprechen, die der möglichkeiten von StarBasic sehr ähnlich sind.

VBA
Cells(I,2)

VBA
Range("A2")


StarBasic
getCellByPosition(I,2)

StarBasic
getCellRangeByName("A2")


So, und nun zu deinem Problem.
hab es versucht über die Makro Aufnahme
War das deine bevorzugte Methode in VBA?
Das kannst Du auf jeden fall in LO knicken. Denn Aktionen oder Änderungen auf einem Grafischen Element kriegst Du nicht per Makro-Recorder aufgezeichnet. Denn der Rekorder zeichnet ja schon unter normalen Umständen nicht alles auf. Also bleibt dir nix anderes übrig als dich richtig mit der Programmierung in StarBasic auseinander zu setzen.

Was ich will ist dass wenn ich auf der Button drucke und die Makro ist Ausgeführt dann muss der Button Ausgeschaltet (disable) werden.
Also er soll deaktiviert werden, aber NICHT unsichtbar geschaltet werden? Ich frage das nur zur Sicherheit nach.

craig hat geschrieben: Nun habe ich zu Deiner Frage, noch Fragen:
  1. Befindet sich der Button auf einem Dialog oder in einem Dokument?
  2. Wenn in einem Dokument in welchem: CALC oder WRITER oder usw.?
Was craig mit Dialog sagen will (ich weiß es ja, da ich selber damit arbeite), wäre in Excel-VBA gleichzusetzen mit einem "UserInterface" (UI).

Und ich würde dir dringend raten eine Beispieldatei hier anzuhängen, da ansonsten es mit Hilfe unserseits sehr schwer wird.



Gruß
balu

swolf
* LO-Experte *
Beiträge: 1143
Registriert: Di 14. Feb 2012, 16:56

Re: Wieder mal blöd

Beitrag von swolf » Di 4. Okt 2016, 00:11

balu hat geschrieben:Denn der Rekorder zeichnet ja schon unter normalen Umständen nicht alles auf.
Hallo Atwist,
in der Programmhilfe kannst du, wenn du möchtest, nachlesen,
welche Einschränkungen es beim Makrorekorder gibt.
F1 –> "Makros aufzeichnen"

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Wieder mal blöd

Beitrag von gogo » Di 4. Okt 2016, 01:16

Code: Alles auswählen

sub Deaktiviert_das_KE(oEvent)
...
oEvent.source.model.Enabled = false
...
end sub
... wird's tun.
Dem Ereignis "Aktion ausführen" Dein Makro zuweisen.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

Re: Wieder mal blöd

Beitrag von Atwist » Di 4. Okt 2016, 07:02

Hallo alle,

Ich bemühe um die Lo Basic Sprache hin zu bekommen und einen Makro aufnehmen kann ich auch aber dass sind ja 10 Zeilen Basic statt 2 oder 3 mit VBA.
Bei meine Problem hab ich jedes mal etwas dass Kommando "commandButton_1" benutzt um meine Button 1 aus zu schalten. muss "oEvent.source.model" sein.
Aber was ich nicht verstehe ist wie bekomme ich die unterschied zwischen 2 Buttons.
In VBA ist es um die Buttons wieder Ein zu schalten.

Code: Alles auswählen

Sub CommandButton_3 Click()
CommandButton_1.Enable = True
CommandButton_2.Enable = True
End Sub
Und jetzt hab ich kein unterschied wenn ich wieder "oEvent.source.model" benutze.
Schöne grüße aus Emsland

Andreas

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Wieder mal blöd

Beitrag von gogo » Di 4. Okt 2016, 11:10

evtl. so:

Code: Alles auswählen

Sub CommandButton_3 Click(oEvent)
oEvent.Source.model.parent.getbyname("CommandButton_1").Enabled = True
oEvent.Source.model.parent.getbyname("CommandButton_2").Enabled = True
End Sub
oEvent.source.model ... ist das Model des Buttons
oEvent.Source.model.parent ... ist das "Formular-(Objekt)" in dem sich der Button und in der Regel auch alle anderen Buttons... (^=Kontrollelemente) befinden. Die Kontrollelemente des Formulars bekommt man (u.a.) mit der Methode .GetByName("NameDesKEs").
(In der Regel hat man nur 1 Formular-Objekt, außer man legt per Hand ein weiteres an.)

Du kannst auch den Status abfragen:

Code: Alles auswählen

Sub CommandButton_3 Click(oEvent)
if oEvent.Source.model.parent.getbyname("CommandButton_1").Enabled then
	oEvent.Source.model.parent.getbyname("CommandButton_1").Enabled = false
	oEvent.Source.model.parent.getbyname("CommandButton_2").Enabled = false
else
	oEvent.Source.model.parent.getbyname("CommandButton_1").Enabled = true
	oEvent.Source.model.parent.getbyname("CommandButton_2").Enabled = true
end if
End Sub
übersichtlicher:

Code: Alles auswählen

Sub CommandButton_3 Click(oEvent)
with oEvent.Source.model.parent
	if .getbyname("CommandButton_1").Enabled then
		.getbyname("CommandButton_1").Enabled = false
		.getbyname("CommandButton_2").Enabled = false
	else
		.getbyname("CommandButton_1").Enabled = true
		.getbyname("CommandButton_2").Enabled = true
	end if
end with
End Sub
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

Re: Wieder mal blöd

Beitrag von Atwist » Di 4. Okt 2016, 11:25

Danke gogo,

Mit diesen Beispiel ist es leichter die LO Basic zu verstehen.
Ich werde diesen mal in meins einbauen.
(In der Regel hat man nur 1 Formular-Objekt, außer man legt per Hand ein weiteres an.)
Wenn ich es richtig verstehe dann muss ich auch immer mit die Formular Navigator Arbeiten und alles unter 1 Formular bauen.
Schöne grüße aus Emsland

Andreas

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Wieder mal blöd

Beitrag von gogo » Di 4. Okt 2016, 12:12

es können beliebig viele Formular-Objekte sein die beliebig verschachtelt sind. So ein Formular-Objekt ist einfach nur eine Container in dem sich andere Objekte befinden. Darüber hinaus KANN ein Formular-Objekt auf Daten einer Tabelle hinweisen (muss es aber nicht!). Ein Formular-Objekt, dass in CALC oder im WRITER erstellt wird um dort in einem Tabellenblatt/Writer-Dokument einen Button anzuzeigen hat per se keine Datenherkunft. Falls du aber in BASE mit dem Formular-Assistent ein Formular erstellst wird das generierte Formular-Objekt aber die Daten einer Tabelle darstellen können.
Im Formular-Navigator kannst Du in Form einer Baumansicht alle Formular-Objekte sehen, und auch alle Kontrollelemente, die sich in den Formular-Objekten befinden. Die Namen die dort angezeigt werden kannst Du für die .GetByName() Methode verwenden (um im Baum hierarchisch nach unten zu gehen) das jeweils übergeordnete Objekt bekommt man mit der Methode .Parent()

Falls es 2 Formulare gibt kann man bei einem Klick auf "Button1" im Formular "F01" etwa so zum "Button2" im Formular "F02" kommen:

Code: Alles auswählen

...
oEvent.Source.Model.Parent.Parent.GetByName("F02").GetByName("Button2")
...
Mit dem Tools xRay oder MRI kannst Du sehr einfach Objekte zur Laufzeit erkunden.
(Nach der Installation einfach im Makro "mri(oEvent.Source)" oder "xray(oEvent.Source)" einfügen - das Makro wird an dieser Stelle unterbrochen und das Objekt angezeigt, mit all seinen Methoden und Eigenschaften...
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Atwist
Beiträge: 82
Registriert: Mo 14. Sep 2015, 18:46

Re: Wieder mal blöd

Beitrag von Atwist » Di 4. Okt 2016, 12:28

Mit dem Tools xRay oder MRI kannst Du sehr einfach Objekte zur Laufzeit erkunden.
Mit MRT versuch ich mich schon schlau zu machen, aber xRay konnte ich nicht so schnell finden.

Vielen dank für den Erklärung über die Formulare.

Die Beispielen haben mir sehr geholfen um LO Basic besser zu verstehen.
Schöne grüße aus Emsland

Andreas


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten