# Win cc Flex Füllfarbe eines Objektes ändern???



## Dementis (8 März 2011)

Guten Tag zusammen,

Ich hab folgendes Problem. Ich würde gerne ein Objekt in Win cc Flex Abhängig von einer Variable die Füllfarbe ändern.
Genauer gesagt geht es um eine RGB Auswahl.
Ich habe 3 Schieber mit dennen ich die Werte der einzelnen Kanäle ändern will (0-255 pro kanal) und je nach mix soll die dazugehörige Farbe bei einen Objekt angezeigt werden und genau da ist mein Problem! 
Hab leider über suchfunktion nichts brauchbares gefunden 

mfg


----------



## rostiger Nagel (8 März 2011)

Wenn dein Panel Scriptfähig ist sollte das gehen.

```
Dim Opjekt
Set Opjekt = HmiRuntime.Screens("Bild_1").ScreenItems("Rechteck_1")
Opjekt.BackColor =  RGB(255,0,0)
```
 
oder auch so, dann kannst du Rot, Grün und Blau mit externen Variabeln fütten


```
Dim Opjekt
Dim Rot, Gruen, Blau
Rot = 255
Gruen = 0
Blau = 0 
Set Opjekt = HmiRuntime.Screens("Bild_1").ScreenItems("Rechteck_1")
Opjekt.BackColor =  RGB(Rot,Gruen,Blau)
```
 

hier noch ein Auszug aus der Online hilfe


> Beschreibung
> Legt die Hintergrundfarbe des angegebenen Objekts fest.
> Zugriff in Runtime: Lesen und Schreiben
> Syntax
> ...


----------



## PN/DP (8 März 2011)

Füllfarbe dynamisieren macht man in WinCCflex normalerweise über Animation > Gestaltung, allerdings muß man da eine vordefinierte Farbliste anlegen und eine Variable als Index angeben. Wenn Du Dich auf 64 Farben (3x 16 Stufen R/G/B) beschränken könntest, dann bleibt die vordefinierte Farb-Liste noch machbar.

Direkt dynamische RGB-Werte vorgeben geht in WinCCflex nur über Objekt-Attribute in einem Script.
Wie können Objekte in WinCC flexible über Scripte dynamisiert werden?

```
Set Objekt = HmiRuntime.Screens("Bild_1").ScreenItems("Rechteck_1")
Objekt.BackColor = RGB (R_value, G_value, B_value)
```
Allerdings habe ich festgestellt, daß es schwierig ist, sicherzustellen, daß die Objekte immer mit den richtigen Attributen angezeigt werden. Das Script müßte bei vielen Ereignissen aufgerufen werden: Wertänderung jeder beteiligten Variable + Bild aufgebaut + (weiß ich nicht mehr). Bei internen Variablen kann es passieren, daß das Wertänderung-Ereignis wegen dem Loop-Braker nicht aufgerufen wird.

Auf was für einem Panel/Bildschirm willst Du denn Deine exorbitant vielen Farben anzeigen? Kann man da überhaupt so viele Farbvarianten erkennen? Wozu braucht man so viele Farbvarianten?

Harald


----------



## Dementis (8 März 2011)

He cool, Danke Leute genau das hab ich gesucht!!

Klappt super


----------



## Dementis (8 März 2011)

Jetzt mus ich nur noch den Farbcode des sich daraus ergibt über eine Variable in die sps übertragen


----------



## Dementis (9 März 2011)

So ich brauch nochmal ne kleine Hilfe!

Die Kommunikation mit SPS bzw der RGB variablen Funktioniert ohne Probleme jetzt, nur würde ich gerne in Win cc Flex über ein "symbolische EA-Feld" (wenn möglich) eine dynamische Dropdown liste machen, wobei nicht zwingend ein Text drin stehen soll, sondern bestimmte Farben zur auswahl stehen sollten.

Notfalls könnte man das auch mit einer rezeptverwaltung realisieren schätz ich mal aber mit einer Dropdown liste würde es mir besser gefallen


----------



## rostiger Nagel (9 März 2011)

wenn du das über eine Drop Down Liste machen möchtest, geht das über eine
Textliste. Diese kannst du dan über eine Ein bzw. Ausgabefeld verarbeiten.


----------



## Dementis (9 März 2011)

Das ist mir schon klar.

aber ich will das ja Dynamisch machen, d.h. das immer wieder ein Eintrag dazu kommen kann.
Najo ich könnte das limitieren aber dann stellt sich die Frage wie ich die einzelnen Eintrage mit der Farbe gestalten kann bzw eine Farbe zuweisen kann.


----------



## rostiger Nagel (9 März 2011)

ich versteh noch nicht ganz worauf du hinaus willst, kannst du das noch
einmal ein bischen ausführlicher darstellen.


----------



## PN/DP (9 März 2011)

Man kann den Text eines Listeneintrages dynamisch ändern.
Man kann die Anzahl der Listeneinträge NICHT ändern.
Einzelne Listeneinträge verschiedenfarbig einfärben kann man auch nicht.

Harald


----------



## Jochen Kühner (9 März 2011)

Dementis schrieb:


> Das ist mir schon klar.
> 
> aber ich will das ja Dynamisch machen, d.h. das immer wieder ein Eintrag dazu kommen kann.
> Najo ich könnte das limitieren aber dann stellt sich die Frage wie ich die einzelnen Eintrage mit der Farbe gestalten kann bzw eine Farbe zuweisen kann.



Hast du ein Panel, oder eine PC Runtime? Vieleicht liese sich auf der PC Rutime sowas mit einem Zusatzcontrol loesen!


----------



## Dementis (9 März 2011)

Schade, das es nicht so geht wie mir das vorstelle. 

@jochen hab Runtime

Najo hab mir jetzt ne alternative überlegt.
Ich werd das einfach mit Buttons realisieren da werd ich das einfach begrenzen.

Was ich gern noch machen würde, ist das man wie bei div. grafik programmen oder auch bei Excel die Farbpalette einblenden kann bzw eine gewünschte Farbe auswählen kann und diese dann verarbeitet.


----------



## Jochen Kühner (9 März 2011)

Also Ich habs grad versucht.

Die Win Forms Listbox als Zusatzcontrol, lässt sich zwar plazieren, aber danach stürzt bei mir Runtime ab. 
Hab aber noch "S7FlatComboBox" gefunden. Da funktionierts per Script über AddItem Einträge hinzuzufügen!


----------



## Dementis (9 März 2011)

danke jochen für die info.

Najo hab ich entschieden das ohne Dropdown menü zu machen..

Das größte Problem was ich eher momentan habe das ich die Farbeinstellung nicht per Schieber realisieren will sondern anhand einer Farbpalette.

Also das ich so ein Fester bekomm wie bei Excel oder anderen (Grafik) Programmen und ich dann per klick auf die gewünschte Farbe der RGB code ausgelesen wird.


----------



## rostiger Nagel (9 März 2011)

Jochen Kühner schrieb:


> Also Ich habs grad versucht.
> 
> Die Win Forms Listbox als Zusatzcontrol, lässt sich zwar plazieren, aber danach stürzt bei mir Runtime ab.
> Hab aber noch "S7FlatComboBox" gefunden. Da funktionierts per Script über AddItem Einträge hinzuzufügen!



Sag mal Jochen, das sind doch WinCC Addon, laufen die auch in flexibel?


----------



## Jochen Kühner (9 März 2011)

im prinzip kann man ja jedes ocx in flexible einfügen, aber mit vielen crashts! Dieses hat eben funktioniert!


----------



## Jochen Kühner (9 März 2011)

Dementis schrieb:


> Das größte Problem was ich eher momentan habe das ich die Farbeinstellung nicht per Schieber realisieren will sondern anhand einer Farbpalette.



Wie wärs mit folgenden Script:


```
Dim objCD
Dim Farbe
Set objCD = CreateObject("MSComDlg.CommonDialog")
objCD.ShowColor  
Farbe=objCD.Color
```


----------



## PN/DP (9 März 2011)

Helmut_von_der_Reparatur schrieb:


> Jochen Kühner schrieb:
> 
> 
> > Also Ich habs grad versucht.
> ...


Siemens wird schon wissen, warum ein Siemens-Control nicht ausdrücklich für die Verwendung in WinCC flexible freigegeben ist ...



Dementis schrieb:


> Das größte Problem was ich eher momentan habe das ich die Farbeinstellung nicht per Schieber realisieren will sondern anhand einer Farbpalette.
> 
> Also das ich so ein Fester bekomm wie bei Excel oder anderen (Grafik) Programmen und ich dann per klick auf die gewünschte Farbe der RGB code ausgelesen wird.


Dazu müßtest Du für Deine Aufgabe erst einmal reichlich 16 Millionen Farbpixel in einem Palettenbild unterkriegen. 
Als nächstes müßtest Du an die Mausposition 'rankommen.
WinCC flexible ES: Tipps und Tricks für das Erstellen von Skripten


> 5. *Wie kann die aktuelle Mausposition ermittelt werden?*
> 
> Um die aktuelle Mausposition auszulesen, muss auf das API (Application Programming Interface) des Betriebssystems zugegriffen werden.
> Der Zugriff auf das API des Betriebssystems über DLLs wird in VB-Skripts nicht unterstützt. Alternativ kann die aktuelle Mausposition über ein selbst programmiertes ActiveX Control, das auf das API des Betriebssystems zugreift, ausgelesen werden.
> ...



Alternativ könntest Du reichlich 16 Millionen 1 Pixel große unsichtbare Schaltflächen projektieren. 
Dein Problem ist wohl (wenn überhaupt) nur mit 3 Schiebereglern R/G/B oder 3 Eingabefeldern für jeden Farbanteil lösbar. 
Wobei Schieberegler mit 256 Stellungen auch schon stark grenzwertig sind.
Wenn Du Dich auf 64 Farben beschränken könntest, dann wäre Deine Farb-Auswahl ja noch machbar. Aber 256*256*256 = 16.777.216 Farben? 

Ich frage nochmal: Wofür braucht man so viele Farben? 

Bist Du sicher, daß man die Farbnuancen auf Deinem PC-Monitor überhaupt unterscheiden kann?
Wozu brauchst Du bunter als Bunt? Willst Du mit WinCC flexible ein Fotobearbeitungprogramm programmieren?
Mußt Du für Deine Aufgabe unbedingt WinCC flexible verwenden?
Vielleicht solltest Du Dein Konzept nochmal überdenken.

Harald


----------



## Jochen Kühner (10 März 2011)

PN/DP schrieb:


> Siemens wird schon wissen, warum ein Siemens-Control nicht ausdrücklich für die Verwendung in WinCC flexible freigegeben



Mit dem Siemens Control hats ja funktioniert!


----------



## Dementis (14 März 2011)

Sorry hat etwas gedauert!

Also da es mit der Farbpalette nicht so Funktioniert wie ich mir das am Anfang vorgestellt hätte, hab ich das anders gelöst.

Ich hab mir zusätzlich zu den RGB Slider noch einen 4ten gebastelt mit den geht ich dann die Farbpalette in groben komplet durch (nicht alle 14mill!! ).
Aber feineinstellungen kann man dann mit den RGB Slider machen.

Jetzt arbeite ich daran die eingestellten Farben (RGB Werte) in die Dafür vorgesehen Szenarienbutton bzw Datenbasteinbereich zu schreiben.
Momentan mach ich das über die Wincc Varliste, was aber bissal müsam ist.
Evtl find ich noch leichteren Weg. :-D

mfg Markus


----------

