Jump to content
  • 0

Een Knop actief en zichtbaar maken onder bepaalde voorwaarde


Peter Geens

Question

Posted

Is het mogelijk een knop te 'disablen' en te verbergen wanneer er aan bepaalde voorwaarden niet wordt voldaan ?

 

Probleem is dat ik achter een knop een script heb zitten dat alleen maar uitgevoerd mag worden wanneer bv. de klant luistert naar de naam X.

 

Simpel testen via het script is een oplossing maar ik vraag mij af of je de knop niet kan uitschakelen en onzichtbaar maken zodanig dat de test in de script niet hoeft aangeroepen te worden. (zoals bij VB)

25 answers to this question

Recommended Posts

  • 0
Posted

Zet de knop als een conditionele graphic in een calculatieveld (met container als resultaat) en laat de calculatie ervoor zorgen wanneer precies de knop getoond wordt en wanneer niet.

Uiteraard moet je er ook voor zorgen dat het aanklikken van de "button zone" geen ongewenste resultaten geeft. In je button script moet je dus ook de nodige voorzieningen treffen.

Als ik het goed heb, moet je dus twee keer beveiligen, terwijl het precies dat was wat je wilde vermijden.

Heeft er iemand een betere oplossing?

  • 0
Posted

Het nadeel van het gebruik van een container-veld over een knop, is dat je de knop nog steeds kunt klikken. Het handje verraadt trouwens waar je knop zich heeft verborgen.

 

Een ander oplossing, die je kunt gebruiken, waarbij je de knop onmogelijk kunt aanklikken, tenzij hij zichtbaar is, is gebruik te maken van een portal. (1 portal rij)

Je zet de knop op de portal rij.

 

Je hebt een veld vb. KEY_FIXED die op ieder record gelijk is aan 1.

Je maakt een tweede calculatie veld:

if (jouwvoorwaardisvoldaan ; 1 ; 0)

 

En je maakt een relatie tussen deze twee velden.

Als aan de voorwaarde voldaan is, zorg je dat er effectief een relatie is (de knop wordt zichtbaar). Indien niet aan de voorwaarde voldaan is, is er geen gerelateerd record, dus geen knop.

 

Groeten,

 

 

Koen

  • 0
Posted

Ik gebruik inderdaad die techniek al sinds FM3.

 

Het is gebaseerd op de Visibility techniek van o.a. John Mark Osborne.

 

Ik gebruik dit bij het opzetten van een kwaliteitssysteem, waar b.v. de printknop pas kan geactiveerd worden wanneer aan vooraf bepaalde voorwaarden werd voldaan. Zoals bij het opvolgen van de niet-conformiteiten.

 

Het kan ook gebruikt worden om te beletten dat een layout 'overladen' wordt met knoppen. Enkel de 'nodige' knoppen worden getoond 'wanneer het nodig is'.

 

Of gewoon om al of niet een menulijst te tonen.

 

En zo kun je zelf op tientallen toepassingen komen.....

  • 0
Posted

Een vraagje dat hier mee te maken heeft:

 

Ik gebruik de eenvoudige truc (containercel) om buttons te laten zien in lay-outs. Voor de buttons gebruik ik .gif afbeeldingen die in een (global) container zijn opgeslagen en die dus (al naar gelang de omstandigheid) in de container geladen worden. Probleem: de afbeeldingen zien er niet goed uit. Het lijkt of de afbeelding wat gekrompen is. Ik heb de settings overgenomen uit een andere (door mij gemaakte) database (inclusief de afbeeldingen) waar het er wel goed uit ziet. Iemand een idee?

 

Michiel

 

P.S. de portal tip is geweldig, het bleek inderdaad wel eens voor te komen dat mensen op een "niet bestaande" button klikten. Tot nu toe had ik die situatie opgelost met een extra regel in het script dat de layout wissel uitvoerde, maar da´s natuurlijk een goedkope oplossing.

  • 0
Posted
Probleem: de afbeeldingen zien er niet goed uit. Het lijkt of de afbeelding wat gekrompen is.

 

het lijkt erop dat je eens in layout modus moet duiken, het format>graphic-menu opentrekken met je containerveld geselecteerd en kiezen voor cropping.

zo gepiept.

of je containerveld exact even groot maken als je prentje (+1 pixel als ik me niet vergis).

  • 0
Posted

Nog even terug naar de gouden tip.

Ik wou die al direct gaan gebruiken op een intro lay-out;

staat daar nu wel een mooie ronde knop zeker...

als ik net buiten die knop klik, in de hoek van het portaaltje, dan wordt de knop in reverse video weergegeven.

Kan dit uitgesloten worden ? (of moet ik ronde knoppen voortaan uitsluiten ?)

 

Het blijft wel een gouden tip !

  • 0
Posted

Bedankt voor deze knappe toepassing. Met wat creatief denken is daar heel wat gebruik van te maken.

Ik begin nu te geloven dat het op die manier was dat Kuifje in de tijd die zonsverduistering plots tevoorschijn toverde: een doodgewone portal met een zwarte zon erin! :wink:

  • 0
Posted

Ik heb een soortgelijk probleem, wat ik geprobeerd heb op te lossen met het bestandje van G|V. Ik loop echter telkens tegen beperkingen van Global fields aan. Global fields accepteren geen invulverplichting (okee slaat ook niet echt ergens op, maar goed), Global fields kunnen niet geïndexeerd worden en al zulk soort dingen meer. Waar het om gaat is dat ik eerst een aantal kenmerken van de db wil aangeven, nog voordat er records zijn. En dat kan dus alleen maar via global fields lijkt wel...... Ik wil dan dat de knop met het script "ga nu maar records aanmaken op basis van de ingevulde globals" (een script wat op zich goed werkt bij mij) pas zichtbaar wordt als aan een aantal voorwaarden voldaan is. 7 van de 8 globale velden moeten eerst ingevuld zijn, waarbij de waarde van 1 van de velden altijd kleiner moet zijn dan die van een ander veld etc.

 

Misschien kan ik beter per db een aparte db bij gaan houden met alle eigenschappen van die DB en daar dan relationeel van alles mee regelen...? Komende twee dagen wordt er dus niet aan het strand gezeten......

  • 0
Posted
Global fields accepteren geen invulverplichting

 

Misschien kan je iets doen met deze oude truuk: je hebt gelijk met wat je hierboven zegt, maar niemand verplicht je met een global te beginnen: start met een tekst- of een getalveld - of wat je ook maar nodig hebt - creëer vervolgens je valideringsregel(s) zoals je dat wenst, en wijzig daarna het veldttype naar global. Tot je blije verrassing zal je zien dat de validering behouden blijft!! Niet verder vertellen... :wink:

  • 0
Posted

Hmmm dat zou geweldig zijn zeg! Even geprobeerd..... helaas. Het werkt alleen met "echte" calculaties bij mij. Alleen attributen als "validated by calculation" blijven behouden, niet een aangevinkte invulverplichting ("not empty"). Dat onderkend hebbende, heb ik geprobeerd een workaround te maken in de vorm van "validated by calculation" waarbij de calculatie voor een veld luidt [ veld <> "" ] zonder de vierkante haken, maar dat is blijkbaar net iets te simpel gedacht. Toch ben ik er van overtuigd dat het moet kunnen :) We puzzelen verder. Maar André, dank voor deze tip, daar ga ik ongetwijfeld in de toekomst meer gebruik van maken!

  • 0
Posted
[daarom] heb ik geprobeerd een workaround te maken in de vorm van "validated by calculation" waarbij de calculatie voor een veld luidt [ veld <> "" ] zonder de vierkante haken

Geen slecht idee, ware het niet dat het "niets" voorgesteld door de aanhalingstekens met niets ertussen niet in alle gevallen ondersteund wordt. FileMaker raadt het gebruik van "" in dit geval af. Daarom is tijdens een van de vorige upgrades de IsEmpty-functie toegevoegd. Die doet het hier wel. Als valideringscalculatie zou je dus moeten hebben:

 

not IsEmpty(veldnaam)

 

Ik hoop dat je hiermee geholpen bent.

  • 0
Posted

Dank voor je antwoord, André. Ik begrijp dat het zo zou moeten werken, maar wat ik ook doe, ik krijg nergens foutmeldingen als ik iets niet invul. Zelfs niet als ik "validate only if value has changed" uitvink. Ik interpreteer dat althans als "indien uitgevinkt: always validate". Volgens mij staat alles goed en zou het moeten werken, maar dat doet het dus niet :(

  • 0
Posted

Hier in 6.0v4 werkt het wel, maar enkel als het veld al ingevuld is, en het daarna leeggemaakt wordt. Dan krijg ik meteen de (zelf voorziene) foutmelding.

Wat je ook kan doen is een controle-veld maken met een calculated warning-tekst die je dan als een merge field (in het rood) op je scherm zet, vlak bij het veld dat ingevuld moest worden:

 

If(IsEmpty(VerplichtVeld);"Ontbrekende gegevens!";"")

 

Je opstart-script kan dan ook een controle doen op alle records waar deze warning getoond wordt. Ofwel zorg je ervoor dat het scherm niet kan verlaten worden zolang het veld niet ingevuld is:

 

If(IsEmpty(VerplichtVeld)

Halt Script

Else

Go to Layout(watjemaarwil)

EndIf

  • 0
Posted

Je opstart-script kan dan ook een controle doen op alle records waar deze warning getoond wordt.

 

Okee ik ga maar weer even verder puzzelen. Overigens speelt dit alles zich af nog voordat er record gemaakt zijn. Ik wil namelijk eerst een globaal veld invullen (met de restricties die ik wil), en aan de hand daarvan gaat een script voor mij precies het gewenste aantal records aanmaken.

 

Maar ik puzzel weer even fijn verder (ooit gaat het goedkomen :) )

 

Ik gebruik overigens FMP 5.5v1 UK

  • 0
Posted

Daar ben ik nu ook eens benieuwd naar. Enkel wanneer je een button tekent in Filemaker zelf (grafisch zeer beperkt) kan een button een willekeurige vorm krijgen in alle andere methodes neemt de knop de kleinst mogelijke rechthoek aan of natuurlijk het veld zelf.

 

CC

  • 0
Posted

Er bestaat natuurlijk wel een work-around, CyberChicken.

 

Het is wel wat arbeidsintensiever maar levert mooie resultaten op.

Je neemt eender welke knop met een willekeurige vorm en je zoomt erop in aan 400%.

Vervolgens overtrek je de vorm met lijntjes vanuit Filemaker (lijn per lijn van boven naar onder) en volgt daarbij de grenzen van je knop. Als je de volledige knop hebt bedekt, groepeer je de lijntjes, koppelt er een script aan en maak ze vervolgens onzichtbaar.

Bij het gebruik van de knop zal deze de willekeurige vorm volgen.

 

Probeer maar eens :D

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...