Results 1 to 3 of 3

Thread: Raar gedrag dbLookupcombobox by StayOnTop

  1. #1
    Senior Member
    Join Date
    Mar 2002
    Location
    Edam
    Posts
    426

    Raar gedrag dbLookupcombobox by StayOnTop

    Hoi,

    Ik heb een form met (gevulde) dblookupcombobox en een knopje om de formstyle te kunnen wisselen tussen fsStayOnTop en fsNormal.

    Als het form designtime in fsStayOnTop wordt gezet werkt alles zoals verwacht, maar als het form pas runtime op StayOnTop wordt gezet werkt de dropdown van de lookup niet meer.
    En dat blijft verder zo bij het heen en weer switchen: bij fsNormal geen probleem, bij fsStatyOnTop geen uitklaplijst.

    De OnDropdown event van de lookup wordt wel gewoon getriggerd, er verschijnt alleen geen uitklaplijst ( of die "verschijnt" op een niet zichtbare plek).
    Ik heb het probleem tijdelijk even opgelost door in de dropdown event het form tijdelijk in fsNormal te zetten en bij onCloseup weer terug te zetten maar er zou toch een elegantere manier moeten zijn.

    Heeft iemand een idee hoe dit komt en hoe dit eleganter kan worden opgelost?
    NB Good old D7 heeft er geen last van maar in in XE7, 10.4 en 11.3 gaat het mis. ( in ieder geval in Windows 10)

  2. #2
    Ik vermoed dat het komt doordat de handle van de dropdown niet wordt bijgewerkt. Het scherm, de combobox en de dropdown zijn eigenlijk aparte onderdelen met hun eigen Window handle. Als je iets fundamenteels doet zoals het veranderen van de formStyle, kan het zijn dat de controls ook hun handle moeten vernieuwen.
    Waarom dat veranderd is tussen D7 en later weet ik niet, maar je kan het oplossen door zelf een message naar de DBLookupCombobox te sturen.

    Ik had het eerst getest door de parent geforceerd aan te passen (dat triggert ook de nodige handle-magie), maar de message is denk ik netter.
    Het control heeft ook een RecreateWnd method die ook deze message stuurt, maar die method is protected en kan je dus niet zomaar aanroepen.

    Delphi Code:
    1. procedure TForm1.CheckBox1Click(Sender: TObject);
    2. begin
    3.   if Checkbox1.Checked then FormStyle := fsStayOnTop
    4.   else FormStyle := fsNormal;
    5.  
    6.   // DBLookupComboBox1.Parent := nil;
    7.   // DBLookupComboBox1.Parent := self;
    8.  
    9.   DBLookupComboBox1.Perform(CM_RECREATEWND, 0, 0);
    10. end;
    1+1=b

  3. #3
    Senior Member
    Join Date
    Mar 2002
    Location
    Edam
    Posts
    426
    @GolezTrol

    Dank! Met die message werkt alles weer zoals het moet!

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
  •