[Proggess v10] dialog hidden opbouwen

Pagina: 1
Acties:

  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Ik probeer nu iemand uit de brand te helpen die in Progress iets probeert te maken.
Wat wil diegene: Een dialog opbouwen buiten het zicht van een gebruiker, en deze laten zien zodra het dialog opgebouwd is. (Dit geeft meer een feel van een snelle applicatie, zitten zware queries in).

Weet iemand hoe dit kan in Progress 10 (4GL)? (bijv buiten het bereik van het scherm plaatsen oid)?

[ Voor 3% gewijzigd door Sjaak_Trekhaak op 20-10-2006 11:40 ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-02 17:10

Gerco

Professional Newbie

Progress v10 is niet echt een voldoende omschrijving :) Of het mogelijk is en zo ja hoe hangt heel erg af van de techniek die hij gebruikt. Is het ADM, ADM2, Dynamics of de standaard Progress GUI objecten (met alleen 4GL code dus).

Over het algemeen is het lastig om dit soort dingen in Progress te bereiken. Ik heb weleens het een en ander gedaan met de LockWindowUpdate Win32 API call, dat heeft grotendeels het goede effect, maar nog niet helemaal wat jij zoekt.

Het Window van het scherm afmoven is natuurlijk wel mogelijk, maar ook weer afhankelijk van de techniek die hij gebruikt wanneer en hoe je dat zou moeten doen.

@Hieronder:
Of je gebruikt natuurlijk SESSION:IMMEDIATE-DISPLAY 8)7 Had ik aan moeten denken.

[ Voor 21% gewijzigd door Gerco op 20-10-2006 11:25 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Opties:

1. API Call naar LockWindowUpdate gebruiken.
(mits client alleen onder windows draait !!! )

2.
code:
1
2
3
SESSION:IMMEDIATE-DISPLAY=FALSE 
   < code >
SESSION:IMMEDIATE-DISPLAY=TRUE

[ Voor 13% gewijzigd door Verwijderd op 20-10-2006 11:22 ]


  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Gerco schreef op vrijdag 20 oktober 2006 @ 11:22:
Progress v10 is niet echt een voldoende omschrijving :) Of het mogelijk is en zo ja hoe hangt heel erg af van de techniek die hij gebruikt. Is het ADM, ADM2, Dynamics of de standaard Progress GUI objecten (met alleen 4GL code dus).

Over het algemeen is het lastig om dit soort dingen in Progress te bereiken. Ik heb weleens het een en ander gedaan met de LockWindowUpdate Win32 API call, dat heeft grotendeels het goede effect, maar nog niet helemaal wat jij zoekt.

Het Window van het scherm afmoven is natuurlijk wel mogelijk, maar ook weer afhankelijk van de techniek die hij gebruikt wanneer en hoe je dat zou moeten doen.
Het is Progress 10 4GL. Dialog scherm afmoven wil helaas niet: Hij blijft binnen het bereik van de ingestelde resolutie op het scherm.

[ Voor 3% gewijzigd door Sjaak_Trekhaak op 20-10-2006 11:40 ]


  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Verwijderd schreef op vrijdag 20 oktober 2006 @ 11:22:
Opties:

1. API Call naar LockWindowUpdate gebruiken.
(mits client alleen onder windows draait !!! )

2.
code:
1
2
3
SESSION:IMMEDIATE-DISPLAY=FALSE 
   < code >
SESSION:IMMEDIATE-DISPLAY=TRUE
Allebei zijn deze al geprobeerd hoor ik net, werken allebei niet helaas!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-02 17:10

Gerco

Professional Newbie

Vreemd, dat zou je uit de help niet opmaken:
If FALSE, Progress does not update the display until a statement blocks for input, such as an UPDATE statement.
Dit suggereert dat het precies doet wat je wilt bereiken.
FALSE is the default setting. A TRUE setting provides more accurate screen displays during long display loops at the price of slower performance.
Blijkbaar staat het standaard uit, ik heb niet het idee dat Progress op input wacht om mijn GUI objecten te laten zien eerlijk gezegd. Ook een DISPLAY of :SCREEN-VALUE = "blaat" hebben nagenoeg meteen effect.

[ Voor 6% gewijzigd door Gerco op 20-10-2006 11:29 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

En gewoon het via de handle van het window dan?


hWindow:VISIBLE = FALSE.
< opbouwen scherm inhoud >
hWindow:VISIBLE = TRUE.

[ Voor 8% gewijzigd door Verwijderd op 20-10-2006 11:34 ]


  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Verwijderd schreef op vrijdag 20 oktober 2006 @ 11:34:
En gewoon het via de handle van het window dan?


hWindow:VISIBLE = FALSE.
< opbouwen scherm inhoud >
hWindow:VISIBLE = TRUE.
Is al geprobeert, tevens hDialog... maar toch bedankt voor de tip :)

Even voor de duidelijkheid: Het gaat om de dialog boxes, misschien ben ik daar niet helemaal duidelijk in geweest.

Verwijderd

Toch moet die lockwindowupdate apicall werken,
welke handle gooien jullie naar die call toe ?

  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Verwijderd schreef op vrijdag 20 oktober 2006 @ 11:42:
Toch moet die lockwindowupdate apicall werken,
welke handle gooien jullie naar die call toe ?
De handle van de dialog. Werkt verder ook niet.

Verwijderd

Gebruik is volgende:

(code moet wel in dialoog zelf staan).

RUN LockWindowUpdate( FRAME {&FRAME-NAME}:HWND ).
[RUN LockWindowUpdate( {&WINDOW-NAME}:HWND) werkt namelijk niet op dialoog

< code >

RUN LockWindowUpdate(0).

[ Voor 22% gewijzigd door Verwijderd op 20-10-2006 11:54 ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-02 17:10

Gerco

Professional Newbie

rippance schreef op vrijdag 20 oktober 2006 @ 11:43:
De handle van de dialog. Werkt verder ook niet.
Wanneer gaat die call dan af? Als de dialog al klaar is met constructen dan waarschijnlijk. Kun je niet zoiets doen?

code:
1
2
3
4
5
6
OPEN QUERY qWhatever1 FOR EACH ...
OPEN QUERY qWhatever2 FOR EACH ...
OPEN QUERY qWhatever3 FOR EACH ...
OPEN QUERY qWhatever4 FOR EACH ...

VIEW DIALOG-BOX whateverDialog.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Verwijderd schreef op vrijdag 20 oktober 2006 @ 11:49:
Gebruik is volgende:

(code moet wel in dialoog zelf staan).

RUN LockWindowUpdate( FRAME {&FRAME-NAME}:HWND ).
[RUN LockWindowUpdate( {&WINDOW-NAME}:HWND) werkt namelijk niet op dialoog

< code >

RUN LockWindowUpdate(0).
Dat werkt ook niet, vanwege: Tijdens initaliseren van het scherm moet de dialog gehide worden, maar de handle is dan nog niet bekend. Dus de HWND waar je net naar refereerde is niet bekend dan.

Verwijderd

rippance schreef op vrijdag 20 oktober 2006 @ 11:57:
[...]


Dat werkt ook niet, vanwege: Tijdens initaliseren van het scherm moet de dialog gehide worden, maar de handle is dan nog niet bekend. Dus de HWND waar je net naar refereerde is niet bekend dan.
Zal je toch op een of andere manier moeten zorgen dat je een Handle krijgt van die dialoog,
Zet 's in pseudo code hier een en ander neer, want wordt wel heel verwarrend hier.

  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
De handle van de dialog krijgt ie wel, maar van de hwnd niet (initialize):

HDialog: hwnd is ongeldig voor initialise object.

In initializeobject van dialog-box:
code:
1
2
3
run lockwindowupdate (hdialog:HWND).    <--- hier is de HWND nog niet bekend!
RUN SUPER.
run lockwindowupdate (0).


Kan hem niet na de RUN SUPER plaatsen, want dan staat de dialog-box al op het scherm.
In Progress versie 9 werkte ditzelfde principe wel, ook op win XP.

Verwijderd

rippance schreef op vrijdag 20 oktober 2006 @ 12:15:
De handle van de dialog krijgt ie wel, maar van de hwnd niet.

HDialog: hwnd is ongeldig voor initialise object.

In initializeobject van dialog-box:
code:
1
2
3
run lockwindowupdate (hdialog:HWND).    <--- hier is de HWND nog niet bekend!
RUN SUPER.
run lockwindowupdate (0).


Kan hem niet na de RUN SUPER plaatsen, want dan staat de dialog-box al op het scherm.
In Progress versie 9 werkte ditzelfde principe wel, ook op win XP.
Zou toch moeten kunnen, geeft toch niet dat de dialog al op scherm staat ?
Je locked 'm dan, vult je scherm en unlocked 'm.

  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Verwijderd schreef op vrijdag 20 oktober 2006 @ 12:21:
[...]

Zou toch moeten kunnen, geeft toch niet dat de dialog al op scherm staat ?
Je locked 'm dan, vult je scherm en unlocked 'm.
Hehe, daar gaat het juist om :D
Dat de dialog box pas op het scherm komt zodra deze gevuld is :)

Verwijderd

rippance schreef op vrijdag 20 oktober 2006 @ 12:23:
[...]


Hehe, daar gaat het juist om :D
Dat de dialog box pas op het scherm komt zodra deze gevuld is :)
ik ga ff zoeken, het moet kunnen omo dat ding te locken in de initialize, kwestie van goede handle zoeken (moet ff in code graven), zit nu jaartje op delphi project dus heb niet alles 123 bij de hand.

Maar als het ff duurt eer het scherm is opgebouwd, is het dan niet handiger om de user hiervan een status te laten zien?

[ Voor 12% gewijzigd door Verwijderd op 20-10-2006 12:39 ]


  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Wellicht wel, maar in eerste instantie is het idee nog om het scherm met enige vertraging te laten zien.
Het liefst word dat ook gezien als oplossing, tenzij het technisch onmogelijk blijkt.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-02 17:10

Gerco

Professional Newbie

Als je een initializeObject procedure hebt, ben je niet zelf met 4GL code dialogs aan het maken, dan ben je met ADM2 aan het werk. Als je een SmartDialog gebruikt, kun je in de procedure enable_UI het volgende zetten:
code:
1
2
3
4
5
6
7
8
9
10
PROCEDURE enable_UI :
   ...
  VIEW FRAME gDialog.

  RUN LockWindowUpdate ( FRAME gDialog:hWnd ).

  {&OPEN-BROWSERS-IN-QUERY-gDialog}

  RUN LockWindowUpdate( 0 ).
END PROCEDURE.


Als je geen SmartDialog gebruikt, wat gebruik je dan wel? En wat staat er allemaal op die dialog? De initialisatie en activatievolgorde in ADM2 is nogal complex en is hier erg op van invloed. Vooral het verschil of je SmartObjects (SDO, SmartDataViewer) op je dialog zet of dat je er gewoon statische browses e.d. op hebt staan.

[ Voor 9% gewijzigd door Gerco op 20-10-2006 13:19 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Sjaak_Trekhaak
  • Registratie: Juni 2003
  • Niet online
Eindelijk gelukt!
Heb in de viewObject voor de RUN SUPER een HideObject gedaan.
Daarna scherm gepositioneerd en vervolgens de RUN SUPER aanroepen.

Thx voor alle replies!!
Pagina: 1