Results 1 to 8 of 8

Thread: slideview breedte andersom dan gedacht

  1. #1

    slideview breedte andersom dan gedacht

    Hallo

    Ik heb een slideview op mijn form
    Met een onCLick event gaat hiermee mijn menu weg of komt het weer terug.
    Echter de ik krijg na het uitvoeren van het onclick event de verkeerde breedte terug

    Ik verwacht dat wanneer ik de slideview sluit, mijn andere panel dus breder wordt
    Echter ik krijg dus de waardes andersom terug
    Code:
      if SV.Opened then
        SV.Close
      else
        SV.Open;
    
      showmessage(SV.Width.ToString);
    Wanneer de slideview (SV) dus sluit krijg ik de originele breedte terug
    Wanneer ik deze open krijg ik 0 terug

    Kortom er moet iets van een update komen na het open of sluiten van de Slideview maar hoe doe ik dat

  2. #2
    En van wie is die TSlideView?

    Je zou een Application.ProcessMessages kunnen proberen voor de showmessage. Maar de TSlideView.Open en .Close zouden al events moeten zijn waarbij dit netjes geregeld is.

    Zonder processmessages krijg je dus de waarde terug die hij heeft voordat je de onclick binnenkomt.

  3. #3
    Helaas, ook na het toevoegen van de Application.ProcessMessages krijg ik de verkeerde waarde terug
    Blijkbaar snap ik iets niet helemaal

  4. #4
    Misschien handig om te zeggen wat die TSlideView is, ik kan daar niks over terug vinden namelijk - en zonder meer info over dat component kunnen we je lastig helpen ben ik bang.

  5. #5
    Sorry mijn fout het component heet Tsplitview en zit standaard in delphi
    (het voorbeeld programma dat ik gevonden had heet slideview vandaar de verwarring)

  6. #6
    Quote Originally Posted by cpri View Post
    Sorry mijn fout het component heet Tsplitview en zit standaard in delphi
    (het voorbeeld programma dat ik gevonden had heet slideview vandaar de verwarring)
    Ja, bij de TSplitView is het allemaal wel logisch.

    Heb je al eens naar de code van TCustomSplitView.Open gekeken?
    Dan wordt het je wel duidelijk.

    Delphi Code:
    1. procedure TCustomSplitView.Open;
    2. begin
    3.   if FUseAnimation then
    4.     SetState(svsOpening)
    5.   else
    6.     SetState(svsOpened);
    7. end;

    Zie je die FUseAnimantion?
    Samen met mijn hint van Application.ProcessMessages zou er al een lampje moeten gaan branden.

    Die TSplitView doet een animatie van sluiten en openen.
    Dus als hij direct na Open of Close de breedte opvraagt dan zal deze nog niet gewijzigd zijn.
    Dit gaat n.l. in stappen van animationstep aantal pixels per animationdelay.

    Oplossing is dus of een delay inbouwen voordat je die breedte opvraagt, of TSplitView.UseAnimation op false zetten.

    De delay zou ongeveer gelijk moeten zijn aan Width / (AnimationDelay * AnimationSteps) ms.
    Of je maakt een loopje om te controleren of SV.Width reeds de OpenWidth bereikt heeft.

  7. #7
    Er zit op de splitview toch een "OnOpened" en "OnClosed" event? Ik zou die gebruiken, het lijkt me namelijk dat die aangeroepen worden op het moment dat deze breedte al geupdatet is. De code waar je dus de breedte van deze splitview uitleest zou ik dan koppelen aan deze events, zodat je geen rekening hoeft te houden met de animatie tijden

  8. #8
    Bedankt weer voor de uitleg.

    Had eerst een eigen loopje gemaakt maar het OnOpend/OnClose Event is idd een makkelijkere oplossing.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •