farbe eines objekts ändern
Moderator: Moderatoren
farbe eines objekts ändern
Ich denke, dass mein Vorhaben mit Basic möglich ist. Leider weiß ich nicht genau wie:
Ich möchte ein kleines Spiel für eine Silvesterfeier erstellen. Dabei sieht man am Anfang eine Übersicht, kann sich dann ein Gebiet aussuchen. Per Klick wird auf die Folie gewechselt. Hat man die Frage beantwortet / die Aktion erledigt (was auch immer) kommt man wieder zurück zur Übersicht. Hier soll nun die Farbe des Objekts eine andere sein, um zu erkennen, dass diese Frage / diese Aktion schon getätigt wurde.
Meine Idee war: Beim Folienstart der Übersicht wird ein Makro ausgeführt, was die (globalen) Variablen auf true oder false prüft. Je nach Wert wird die Hintergrundfarbe festgelegt. Beim Folienstart der Aktionen werden dann die globalen Variablen jeweils vom Wert her geändert. Ruft man nun wieder die Übersicht auf wird erneut das Makro ausgeführt, dass die Werte der globalen Variablen prüft und die Hintergrundfarben dementsprechend setzt.
Von der Idee her müsste das klappen, nur tauchen bei mir einige Fragen auf:
- Wie kann ich ein Makro beim Start einer Folie aufrufen?
- Wie kann ich mit Basic die Hintergrundfarbe eines Objekts ändern?
(gibt noch mehr, aber fangen wir erst mal damit an)
Vielen Dank für alle Hilfe.
Ich möchte ein kleines Spiel für eine Silvesterfeier erstellen. Dabei sieht man am Anfang eine Übersicht, kann sich dann ein Gebiet aussuchen. Per Klick wird auf die Folie gewechselt. Hat man die Frage beantwortet / die Aktion erledigt (was auch immer) kommt man wieder zurück zur Übersicht. Hier soll nun die Farbe des Objekts eine andere sein, um zu erkennen, dass diese Frage / diese Aktion schon getätigt wurde.
Meine Idee war: Beim Folienstart der Übersicht wird ein Makro ausgeführt, was die (globalen) Variablen auf true oder false prüft. Je nach Wert wird die Hintergrundfarbe festgelegt. Beim Folienstart der Aktionen werden dann die globalen Variablen jeweils vom Wert her geändert. Ruft man nun wieder die Übersicht auf wird erneut das Makro ausgeführt, dass die Werte der globalen Variablen prüft und die Hintergrundfarben dementsprechend setzt.
Von der Idee her müsste das klappen, nur tauchen bei mir einige Fragen auf:
- Wie kann ich ein Makro beim Start einer Folie aufrufen?
- Wie kann ich mit Basic die Hintergrundfarbe eines Objekts ändern?
(gibt noch mehr, aber fangen wir erst mal damit an)
Vielen Dank für alle Hilfe.
Hey Iomtas,
hmm, ein paar zusätzliche Infos wären schön.
Was meist du mit "Folienstart"? Mit welchem Modul von OOo willst du dein Vorhaben eigentlich realisieren (Writer, Calc, Draw, Impress)?
Was verstehtst du unter "Objekten"? Texte? Grafische Objekte? Bilder?
Mit den Infos könnte man auch deine Fragen beantworten.
Viele Grüße
Thomas
PS: Sicher, dass OOo deine Wahl für diese Aufgabenstellung ist? Wäre nicht "Flash" hier angebrachter?
hmm, ein paar zusätzliche Infos wären schön.
Was meist du mit "Folienstart"? Mit welchem Modul von OOo willst du dein Vorhaben eigentlich realisieren (Writer, Calc, Draw, Impress)?
Was verstehtst du unter "Objekten"? Texte? Grafische Objekte? Bilder?
Mit den Infos könnte man auch deine Fragen beantworten.
Viele Grüße
Thomas
PS: Sicher, dass OOo deine Wahl für diese Aufgabenstellung ist? Wäre nicht "Flash" hier angebrachter?
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Sicher wäre Flash hier angebrachter, nur gebe ich dafür keine 1000 EUR aus 
Also, ich möchte das mit Impress realisieren. Bei den Objekten handelt es sich um Rechtecke. Diese haben eine Hintergrundfarbe. Die Hintergrundfarbe soll sich ändern, sobald ein Rechteck geklickt wurde.
Reichen diese Zusatzinformationen? Gerne gebe ich noch mehr preis...

Also, ich möchte das mit Impress realisieren. Bei den Objekten handelt es sich um Rechtecke. Diese haben eine Hintergrundfarbe. Die Hintergrundfarbe soll sich ändern, sobald ein Rechteck geklickt wurde.
Reichen diese Zusatzinformationen? Gerne gebe ich noch mehr preis...
Hey Iomtas,
na ja, grundsätzlich gilt: je mehr Informationen, um so besser. Allerdings reichen die, um dir für dein "Rechteck" Problem Lösungsansätze zu liefern.
Zunächst solltest du alle Objekte (Rechtecke) "benennen" - wenn du sie manuell eingefügt hast, dann Objekt markieren, Kontextmenü -> Objekt benennen.
Dadurch lasssen sie sich später einfach per Code wiederfinden
Also, angenommen dein Rechteck ist auf Folie 1 (Name: "Folie_1") und trägt den Namen "Rechteck_01", der folgende Code "färbt" das Rechteck rot:
Die Problematik ist natürlich, dass du das "Objekt anklicken" als Event irgendwie realisieren musst. Typischerweise würde man hierfür ein Formular nutzen, und dort das mit Schaltflächen realisieren - entweder als Grafische Schaltflächen - dann könnte der Hintergrund auch "gefärbt" werden oder auch als Buttons. Da hättest du nämlich dein Ereignis direkt abrufbereit und könntest ein Makro damit verknüpfen.
Dann allerdings sieht dein Code anders aus - aber das ist eben ein ganz anderes Thema.
Viele Grüße
Thomas
na ja, grundsätzlich gilt: je mehr Informationen, um so besser. Allerdings reichen die, um dir für dein "Rechteck" Problem Lösungsansätze zu liefern.
Zunächst solltest du alle Objekte (Rechtecke) "benennen" - wenn du sie manuell eingefügt hast, dann Objekt markieren, Kontextmenü -> Objekt benennen.
Dadurch lasssen sie sich später einfach per Code wiederfinden

Also, angenommen dein Rechteck ist auf Folie 1 (Name: "Folie_1") und trägt den Namen "Rechteck_01", der folgende Code "färbt" das Rechteck rot:
Code: Alles auswählen
sub Rechteck_faerben
oDoc = thisComponent 'dein Dokument
opage = oDoc.drawPages.getByName("Folie_1") 'deine folie
REM schleife über alle Objekte
for i = 0 to oPage.count - 1
oShape = oPage.getByIndex(i)
if oShape.name = "Rechteck_01" then
oRechteck = oShape 'Objekt gefunden
exit for
end if
next
oRechteck.fillColor = rgb(255, 59, 0) 'Farbe zuweisen
end sub
Dann allerdings sieht dein Code anders aus - aber das ist eben ein ganz anderes Thema.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
super, ich konnte damit eine menge anfangen. Leider habe ich noch ein Denkproblem. Mein Macro soll mit der Präsentation starten und dann als Programm mitlaufen. Ich setze zu beginn meines Makros meine Variablen und dann möchte ich mit ihnen arbeiten. Leider wird das Makro ausgeführt und beendet. Irgendwie gefällt mir das noch nicht. Mein Makro sieht bisher folgendermaßen aus:
Das Problem ist, dass er sich den status der schalter nicht merkt. Außerdem ist die Funktion setschalter0 noch sehr suboptimal. Am besten wäre eine Funktion, die einen Parameter entgegennehmen könnte, aber irgendwie habe ich das über die Interaktion von Flächen nicht geschafft. (Ich nutze flächen als Buttons, die dann die Makros aufrufen).
Code: Alles auswählen
REM ***** BASIC *****
dim schalter(25) as boolean
Sub Main
Rechteck_faerben
End Sub
sub starten
schalter(0) = false
schalter(1) = false
schalter(2) = false
schalter(3) = false
schalter(4) = false
schalter(5) = false
schalter(6) = false
schalter(7) = false
schalter(8) = false
schalter(9) = false
schalter(10) = false
schalter(11) = false
schalter(12) = false
schalter(13) = false
schalter(14) = false
schalter(15) = false
schalter(16) = false
schalter(17) = false
schalter(18) = false
schalter(19) = false
schalter(20) = false
schalter(21) = false
schalter(22) = false
schalter(23) = false
schalter(24) = false
end sub
sub Rechteck_faerben
dim button(25) as string
button(0)="allgemein20"
button(1)="allgemein40"
button(2)="allgemein60"
button(3)="allgemein80"
button(4)="allgemein100"
button(5)="silvester20"
button(6)="silvester40"
button(7)="silvester60"
button(8)="silvester80"
button(9)="silvester100"
button(10)="bibel20"
button(11)="bibel40"
button(12)="bibel60"
button(13)="bibel80"
button(14)="bibel100"
button(15)="fun20"
button(16)="fun40"
button(17)="fun60"
button(18)="fun80"
button(19)="fun100"
button(20)="aktion20"
button(21)="aktion21"
button(22)="aktion22"
button(23)="aktion23"
button(24)="aktion24"
oDoc = thisComponent 'dein Dokument
oPage = oDoc.drawPages.getByName("uebersicht") 'deine folie
REM schleife über alle Objekte
for n = 0 to 24
for i = 0 to oPage.count - 1
oShape = oPage.getByIndex(i)
if oShape.name = "butt_"+button(n) then
oRechteck = oShape 'Objekt gefunden
exit for
end if
next
if(schalter(n)) then
oRechteck.fillColor = rgb(220, 35, 0) 'Farbe zuweisen
else
oRechteck.fillColor = rgb(148, 189, 94) 'Farbe zuweisen
end if
next
end sub
sub setschalter0
schalter(0) = true
end sub
Hey Iomtas,
Wäre dennoch sehr schlechter Programmierstiel und beklastet die CPU enorm.
Also, ich würde das gesamte Konzept überdenken! Wie gesagt, Formulare wären eigentlich der richtige Weg. Hier hättest du einzelne Schaltflächen, die du genauso färben kannst, die Makros würden nur starten, wenn man auf die Fläche klickt, und du köntest dir "Schalter" sparen, da du ja die Farbeigenschaft jedes einzlenen Elementes direkt prüfen kanst und somit den Schaltzustand.
Im Übrigen ist mir bei deinem aktuellen Makro nicht klar, was genau du da tust. Wie rufst du das Makro auf? Wann startet dein Makro "starten"? Und - natürlich behält sich dein Makro jkeine Werte - wo den auch? Varaiblen sind nur so lange definiert, wie das Makro läuft bzw. die Bibliothek geladen ist, Startest du das Makro wieder, geht alles von vorne los, die Variablen werden neu initialisiert und haben natürlich keine "alten" werte mehr. Solache Sachen musst du - bei Bedarf - direkt im Dokument unterbringen (also quasi zwischenspeichern) und dort bei Bedarf wieder auslesen.
Viele Grüße
Thomas
Hmm, dazu müsstest du eine Endlosschlaiefe einbauen - mit Verzögerungen. so etwas wieMein Macro soll mit der Präsentation starten und dann als Programm mitlaufen.
Code: Alles auswählen
do
...<Code>
wait(5000) '5 Sekunden warten
loop until <Endebedingung>
Also, ich würde das gesamte Konzept überdenken! Wie gesagt, Formulare wären eigentlich der richtige Weg. Hier hättest du einzelne Schaltflächen, die du genauso färben kannst, die Makros würden nur starten, wenn man auf die Fläche klickt, und du köntest dir "Schalter" sparen, da du ja die Farbeigenschaft jedes einzlenen Elementes direkt prüfen kanst und somit den Schaltzustand.
Im Übrigen ist mir bei deinem aktuellen Makro nicht klar, was genau du da tust. Wie rufst du das Makro auf? Wann startet dein Makro "starten"? Und - natürlich behält sich dein Makro jkeine Werte - wo den auch? Varaiblen sind nur so lange definiert, wie das Makro läuft bzw. die Bibliothek geladen ist, Startest du das Makro wieder, geht alles von vorne los, die Variablen werden neu initialisiert und haben natürlich keine "alten" werte mehr. Solache Sachen musst du - bei Bedarf - direkt im Dokument unterbringen (also quasi zwischenspeichern) und dort bei Bedarf wieder auslesen.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic