2016-05-25 17 views
1

Ich habe ein hoffentlich leicht zu lösendes Problem mit meinem Programm. Mein Programm arbeitet zu 99% (habe noch nicht versucht es zu brechen) und ich bin auf Formatierung für die Skalierung auf mehrere Plattformen usw. angewiesen. Es gibt jedoch einen kleinen Teil meines Programms, der besonders schwer zu positionieren ist, wie ich es getan habe mehrere Objekte, die nicht einzeln immer sichtbar sind. Ich habe einen Beispiel-Pseudocode für das geschrieben, was ich tun möchte, aber ich konnte nicht viele hilfreiche Syntax finden, um mir zu helfen, den Pseudocode zu erfüllen. Der Pseudo-Code ist wie folgt (Entschuldigungen, weil mein Pseudo-Code wird wahrscheinlich formell nicht korrekt):Wie ändert man Gruppen?

FOR each object 
    IF object required then 
     Add object to group 
    ELSE 
     Hide object 
    END IF 
END FOR 
CENTER group 

Danach ich ein ausgefülltes Mindestfähiges Produkt für mein Programm haben sollte, so Hilfe ist sehr willkommen. Prost!

Antwort

0

Verwenden Sie den Befehl show zum Anzeigen von Objekten und den Befehl hide zum Ausblenden von Objekten. Vergessen Sie nicht, auf Ihre Gruppe zu verweisen: control x of group y oder control x of me, wenn das Skript in der Gruppe selbst ist.

Beispiele:

show field 1 of group "Purple" 
hide button "Click Me" of me 
0

Hier für Ihre Pseudo-Code ein Teil des Codes ist. (Beachten Sie, dass ich die Erfassung der Nuancen von dem, was Sie zu tun versuchen.)

repeat with x = 1 to the number of buttons in group "foo" 
    put the long id of button x of group "foo" into tBtn 
    if tObjectIsNeeded then 
     show tBtn 
    else 
     hide tBtn 
    end if 
end repeat 
# this centers the group horizontally and vertically 
set the loc of group "foo" to the loc of this card 

Sie können ein Objekt zu einer Gruppe hinzufügen mit dem copy Befehl:

copy button "bar" into group "foo" 

Sie können die Verwendung delete Befehl, um eine Steuerung von einer Karte zu löschen:

delete button "bar" from group "foo" 

Wenn Sie nur die Gruppe horizontal ausrichten möchten, ändern ihre location Eigenschaft. Die Eigenschaft location ist eine durch Kommas getrennte Liste von zwei Ganzzahlen, wobei die erste die Anzahl der Pixel von der linken Kante der Karte angibt und die zweite die Anzahl der Pixel von der Oberseite der Karte angibt. Es würde wie folgt aussehen:

set the itemDelimiter to comma # comma is default, so this line might not be needed 
put item 1 of the loc of this card into tXloc 
put item 2 of the loc of group "foo" into tYloc 
set the loc of group "foo" to tXloc,tYloc 
+0

ich vergessen zu erwähnen, wenn das Objekt nicht benötigt wird, möchte ich das Objekt, um sicherzustellen, ist nicht in der Gruppe. Gibt es eine Syntax zum Entfernen von etwas aus einer Gruppe? Außerdem möchte ich die Gruppe nur entlang der vertikalen Achse zentrieren, da die horizontale Achse gleich bleibt oder zumindest proportional zur Skalierung anderer Elemente ist. – notHalfBad

0

ein Rechteck Gruppe kann eine andere Größe als die Kontrollen, es enthält, so würde ich das Hinzufügen oder Entfernen Kontrollen nicht stören, ich würde nur die Gruppe der Größe selbst die passe sichtbare. Dann zentriere die Gruppe nach Bedarf.

Wenn dies Teil des von Ihnen entwickelten Hangman-Spiels ist, wird die linke Seite des ersten sichtbaren Feldes zum linken Rand der Gruppe und die rechte Seite des letzten sichtbaren Feldes zur rechten Seite der Gruppe. Die Ober- und Unterseite bleiben gleich.

Versuchen Sie dieses, die richtigen Feldnamen für „firstfield“ und „lastfield“:

put the rect of grp "foo" into tRect 
    put the left of field "firstfield" into item 1 of tRect 
    put the right of field "lastField" into item 3 of tRect 
    set the rect of grp "foo" to tRect -- resizes group to fit visible controls 
    -- now center the group along the horizontal axis: 
    set the loc of grp "foo" to (item 1 of the loc of this cd),item 2 of the loc of grp "foo"