Kleur veranderen van een formulier

LijncoLijnco Member Posts: 22
edited 2010-11-09 in NAV Dutch speaking only
Hallo,

Ik wil graag dat de forecolor van een geheel formulier wijzigt op voorwaarde dat er een bepaald veld is ingevuld.

De waarde in het veld is leeg, rood, of oranje.
De kleur moet veranderen in de tabcontrol forecolor (control1).

Dit heb ik tot nu toe, wat doe ik fout? of kan het überhaupt wel?
//kleurtje bij invullen optioneel veld 3
IF "Optional Field 3" = 'Rood' THEN
CurrForm.Control1.UPDATEFORECOLOR := 255; //255 = Red

Bij voorbaat dank.

Comments

  • ShedmanShedman Member Posts: 194
    Het kan wel degelijk ... je moet echter in de OnAfterFormat-trigger van alle velden deze code zetten voor het betreffende veld.
  • Luc_VanDyckLuc_VanDyck Member, Moderator, Administrator Posts: 3,633
    De vraag was om het gehele formulier van kleur te veranderen, niet de velden ...
    No support using PM or e-mail - Please use this forum. BC TechDays 2024: 13 & 14 June 2024, Antwerp (Belgium)
  • LijncoLijnco Member Posts: 22
    precies.
  • ShedmanShedman Member Posts: 194
    Excuses, goed lezen is ook een vak ](*,)

    Dat veranderd de zaak natuurlijk. Met het wijzigen van de forecolor wil je dus dat de tekstkleur van alle tekst op je form wijzigt. Ik heb even snel wat geprobeerd, maar het lijkt erop dat je de forecolor van knoppen, tabcontrols en labels niet at runtime kan aanpassen. Het kan wel als je meerdere dezelfde knoppen / tabcontrols gebruikt, deze over elkaar een zet en ze dan waar nodig aan en uit zet. Maar dat is wel wat meer werk ...
  • LijncoLijnco Member Posts: 22
    Dank je wel,

    Is het misschien een idee om dan een rood vlak te maken en die dan weer te geven op de achtergrond indien nodig?
    en zo ja, hoe kan ik dat doen?
  • ShedmanShedman Member Posts: 194
    Waarschijnlijk de handigste manier; met een rode en een oranje shape. Pak een rectangle, set backtransparent op No en zet de backcolor die je wilt hebben.

    Dan kun je in je code afvangen of deze zichtbaar moet zijn of niet (via CurrForm.Control1.VISIBLE).
  • LijncoLijnco Member Posts: 22
    Waar moet ik die code neerzetten?
    //kleurtje bij invullen optioneel veld 3
    IF "Optional Field 3" = 'Rood' THEN
    CurrForm.Control1000000001.VISIBLE
    

    Control1000000001 is geen variabele of veld, dat werkt niet voor een shape.
    In de shape kan ik alleen wat kwijt bij <Control1000000001> on push.
  • ShedmanShedman Member Posts: 194
    Je moet een functie maken, waarin je de code zet. OnAfterGetCurrRecord roep je de functie aan. En OnAfterValidate van "Optional Field 3".
  • LijncoLijnco Member Posts: 22
    Ik heb het heel anders opgelost
    Ik heb twee afbeeldingen aangemaakt en in de database ingelezen.
    Deze geef ik weer op voorwaarde dat er iets ingevuld:
    Dmv van twee globale variabelen.
    //Iets laten zien
    GetBitmapRood.GET('BEVROOD');
    GetBitmapOranje.GET('BEVORANJE');
    IF "Optional Field 3" = 'Rood' THEN
    GetBitmapRood.CALCFIELDS(Picture);
    IF "Optional Field 3" = 'Oranje' THEN
    GetBitmapOranje.CALCFIELDS(Picture);
    

    Dit laat hij zien op moment dat het formulier opnieuw wordt geladen.
    Kan ik dit ook zo maken dat hij direct wordt weergegeven?
    Het gaat om het wijzigen van optional field 3
  • SogSog Member Posts: 1,023
    Dit lijkt me onnodig het netwerk te belasten:
    bij onaftergetcurrrec kan je best plaatsen shape (hernoem je shape van control1000000x naar backgroundred oid)
    Hier roep je je functie aan die
    case optionalfield3 of
    'rood': begin
      backgroundred.visible(true); 
      backgroundorange.visible(false);
    end;
    'oranje': begin
      backgroundred.visible(false);
      backgroundorange.visible(true);
    end;
    end;
    
    Best in je formulier alles selecteren, knippen, de shapes invoegen en terug plakken.
    anders zal je als je je formulier ontwerpt altijd de shapes aanklikken.
    |Pressing F1 is so much faster than opening your browser|
    |To-Increase|
Sign In or Register to comment.