"gelöst"Shape-namen in Form als Array

29. Januar 2008 10:27

Moinsen,
ich arbeite momentan an einer Art Visualisierung unseres Lagers und stoße
dabei auf einige unangenehme Eigenschaften, welche der Objektdesigner
leider so hat. so ist es beispielsweise nicht möglich die Hintergrundfarbe
von CommandButtons zur Laufzeit zu verändern. kein Problem, mach ich
sie halt durchsichtig und hinterlege hinter den Feldern shapes, welche ich
via C/AL-Code ja ansprechen kann auf ihre Sichtbarkeit. nun komm ich
hier aber auf das eigentliche Problem. Ich habe es hier mit knapp 1000
Feldern zu tun, da jedes Regal der Halle abgebildet ist. Hinter jedem dieser
knapp 1000 Felder liegen 3 Farbige Shapes, welche ich via Quellcode
sichtbar machen will. Dieses Unterfangen bläht den gesamtquellcode des
Projektes extrem auf, da ich für jedes Feld w, h, xpos, ypos und visible
bearbeiten muss.

Mit ner Schleife wärs alles kein Ding das kurz und knapp abzufangen,
jedoch brauch ich dazu die Felder-namen in nem Array. Hat vielleicht
jemand ne idee wie man das umsetzen könnt ohne den Code unnötig
aufzublähen?

wär euch sehr zu dank verpflichtet
Marcel


EDIT: damit ihr ne kleine vorstellung bekommt wie es aussieht...
Bild
Zuletzt geändert von Phoenix am 29. Januar 2008 15:04, insgesamt 2-mal geändert.

29. Januar 2008 10:34

moin,

schau Dir mal die Tabelle 'Field' an. Da kannst Du einen Filter auf die 'TableNo' setzen und hast dann in einem Record alle Felder. Du könntest sie dann in ein Array schreiben, wenn Du das dann noch brauchst.

29. Januar 2008 10:37

hab mich bestimmt umständlich ausgedrückt, deshalb hab ich nochmal
nen screen bei screex geuped wo man knapp sieht worums geht.

die buttons sind halt ohne bezug auf ne tabelle und ham nur ne hinterlegte OnPush-Fkt.

beim anklicken der buttons öffnet sich dann die ebenenansicht. bei ihr hab
ich mit durchsichtigen commandbuttons und hinterlegten shapes gearbeitet,
welche in abhängigkeit zur Fachbelegung eingefärbt werden. und hier is mir
dann halt aufgefallen, dass ich für die 9 felder 27 shapes brauchte und für
die steuerung knapp 240 zeilen Code.

Bild

29. Januar 2008 15:02

Hab dank nem Gedankenanstoß von Michael Schumacher in nem anderen
Thread (klick) nun eine andere Lösung des Problems gefunden.

wenn ich mit nem 2-dimensionalen Array arbeite wobei die erste dimension
die position darstellt (1-9) und die 2. dimension die farbe (1-3) und diese
Variable als SourceExpr für ne Textbox nehme kann ich mit ner 15-Zeilen
Schleife alles erschlagen.

fülle für jede Position dann die 2. dimension mit dem Wert 'ggg', welcher
dank Schriftart Webdings und Schriftgröße 3000 das gesamte Feld ausffült.

Michael Schumacher hat geschrieben:Du könntest da evtl dem gewünschten nahekommen, wenn Du in einer weiteren Textbox den Font Webdings auswählst, wo das kleine g das grafische Zeichen eines ausgefüllten Blocks ist, setze die SourceExpression fest auf 'gggg' und mit deiner Berechnung die Updateforecolor für diese Textbox, dann bekommst du einen kleinen Balken in der Farbe.


habe dann halt 3 übereinander gelagert textboxen (rote, gelbe, grüne
Schriftart) und sehe immer nur die farbe, deren wert ich fülle.

Code:
CLEAR(name);
FOR x:= 1 TO 9 DO BEGIN
  IF "Artikel Lagerorte"[x]."Fach-100%-Bestand" > 0 THEN
    "Belegung%"[x] := "Artikel Lagerorte"[x].Fachbestand / "Artikel Lagerorte"[x]."Fach-100%-Bestand" * 100
  ELSE
    "Belegung%"[x] := 100;

  IF "Belegung%"[x] <= 50 THEN
    name[x][1] := 'ggg'
  ELSE
    IF ("Belegung%"[x] > 50) AND ("Belegung%"[x] <= 75) THEN
      name[x][2] := 'ggg'
    ELSE
      IF "Belegung%"[x] > 75 THEN
        name[x][3] := 'ggg';
END;


Einziger Nachteil ist das ein späteres Bearbeiten in wilder Klickerei
ausartet.

Dies ist das Beispiel für die kleine Übersicht. Bedeutet zwar immernoch 3k
Textboxen anlegen für die gesamtübersicht, wobei ich aber halt mit viel
weniger Code hinkomme.

Vielen Dank an Michael für den Gedankenanstoß!