UserLib RequesterPlus

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

UserLib RequesterPlus

Message par Flype »

Je vous présente ma nouvelle UserLib "RequesterPlus".
Concue pour vous apporter de nouvelles requête utilisateur...

Cette libs n'en est qu'à ses débuts, elle va grossir
avec pleins d'autres type de requester dans le futur :P

Nb: Compilé avec TailBite 1.1 PR 10 et PureBasic 3.90

Vous pouvez la télécharger ici :

http://www.serveurperso.com/~flype/Pure ... erPlus.zip

Image
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

J'ai ajouté deux nouvelles fonctions :

Code : Tout sélectionner

TextRequester(WindowID.l, Title.s, Message.s, Text.s)
TextBox(WindowID.l, Title.s, Message.s, Text.s)
Image
DominiqueB
Messages : 47
Inscription : sam. 01/mai/2004 14:41

Hello

Message par DominiqueB »

Merci pour ton code, cool.

J'ai fait quelques essais:
a) la fonction textbox() est repportée comme inexistante dans ta librairie, j'ai donc recompilé le source avec tailbite, ca marche à nouveau.
b) dans l'exemple Requesterplusdemo le nombre de paramètres est incorrect, les 2 derniers ne correspondent pas à la description dans l'aide et lors de la compilation l'editeur le signale "incorrect number of parameters".
c) le Aboutshellrequester dans l'exemple "RequesterPlus_AboutShell.pb" plante sur le 2ème appel. Je pensse que c'est le "CatchExeBigIcon()" qui coince, car le 1er appel marche impec.

En tout cas, beau travail ! Je penses qu'on va aller loing avec cet utilitaire "Tailbite" . . .
Merci.
Dominique
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je devrais pas je sais mais j'ai fais un example qui
utilise mon autre lib ( CatchExeIcon ) alors si tu l'as installé ca pose pb c sûr...

j'ai recompiler mon archive et enlever les petits desagréments...

merci
Image
DominiqueB
Messages : 47
Inscription : sam. 01/mai/2004 14:41

oops

Message par DominiqueB »

Tout marche parfaitement à présent, sauf . . .
Décidément le 2ème appel à AboutShellRequester () coince, mais après des tests il semble que ce soit la fonction CatchExeBigIcon() qui ait un problème.
a) ne faut-il pas que cette fonction ne soit exécutée que depuis un exécutable, pas en mode debug depuis l'éditeur ?
b) Le zip de la librairie CatchExeIcon fonctionne lorsqu'on lance l'exécutable que tu as joint, mais dès que je compile le source fournit il y a plantage ! L'icone fournie est-elle bien celle que tu as utilisée pour compiler ton exe ? Est-ce qu'elle ne devrait pas contenir 2 icones: une petite et une grande, qui puissent être récupérées par tes fonctions ?
Moi je n'en voit qu'une, est-ce normal ?

A+
Dominique
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

c'est vrai qu'il n'y a qu'une icone dans mon icone ( la plus petite )
mais chez moi la grande est comment dire "zoomée" sur XP...
je pensais que ca marcherait chez tout le monde :roll:
t'as quel Windows ?

je v regarder de + pres
Image
DominiqueB
Messages : 47
Inscription : sam. 01/mai/2004 14:41

Et un petit CalendarRequester ?

Message par DominiqueB »

J'ai aussi XP pro, donc ya un blème ?

Une proposition de code pour ta lib: un DateRequester() ?

Code : Tout sélectionner

Procedure CalendarCallback(Window.l, message.l, wParam.l, lParam.l)
  Result = #PB_ProcessPureBasicEvents
  ;#MCN_SELECT = -746 ; MCN_SELECT = MCN_FIRST + 4
   
  Select message
    Case #WM_NOTIFY
      *hdrX.NMDATETIMECHANGE = lParam
      
      Select *hdrX\nmhdr\code
        Case  #MCN_SELECT
          
          SendMessage_(WindowID(0), #WM_CLOSE, 0, 0)
          Result = #True
        
      EndSelect
      
  EndSelect
  
  ProcedureReturn Result
EndProcedure


; Select a date with the Windows Calendar.
Procedure GetDate(DateInit.s)
;#MCM_SETCURSEL = $1002
;#MCM_GETCURSEL = $1001

dt.INIT_COMMON_CONTROLSEX\dwSize = SizeOf(INIT_COMMON_CONTROLSEX)
dt\dwICC = #ICC_DATE_CLASSES
InitCommonControlsEx_(@dt)

st.SYSTEMTIME\wYear = Val(Left(DateInit, 4))
st\wMonth = Val(Mid(DateInit, 5, 2))
st\wDay = Val(Right(DateInit, 2))

If OpenWindow(0, 165, 0, 196, 156, #PB_Window_WindowCentered | #PB_Window_Invisible, "Choisissez une date:")
  hndlCalendar.l = CreateWindowEx_(0, "SysMonthCal32", "DateTime", #WS_CHILD | #WS_VISIBLE | #WS_BORDER, 0, 0, 196, 156, WindowID(0), 0, GetModuleHandle_(0), 0)
  SendMessage_(hndlCalendar, #MCM_SETCURSEL, 0, @st)
  HideWindow(0, 0)
  
  SetWindowCallback(@CalendarCallback())
  
  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow And EventWindowID() = 0
  
  SendMessage_(hndlCalendar, #MCM_GETCURSEL, 0, @time.SYSTEMTIME)
  CloseWindow(0)
  ProcedureReturn Val(FormatDate("%yyyy%mm%dd", Date(time\wYear, time\wMonth, time\wDay, 0, 0, 0)))
EndIf

EndProcedure
Il faudra peut-être l'adapter pour l'inclure dans ta librairie, moi je l'utilise sous forme de dll. On peut même lui passer une date initiale en paramètre, et elle me retourne la date choisie par l'utilisateur sous la forme: "20040509" c'est le format dont j'avais besoin. On pourrait lui passer un 2ème paramètre qui serait soit une chaine vide, soit une chaine de format du genre: "AAAA/MM/JJ", ou "JJ-MM-AAAA", ou "JJ/MM/AA" il faudrait alors interprèter le format pour retourner la date dans le format choisi...
On appellerais alors: DateRequester("09/05/2004", "JJ/MM/AAAA")
Ca pourrait faire un bon DateRequester(), non ?
Dominique
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

j'ai presque finit l'implémentation :wink:

mais dis moi, comment tu détruit / libère le CalendarGadget
c indispensable pour ma librarie :?: avec DeleteObject_() ?

en attendant regarde le résultat :

Image

la beta donc :

http://www.serveurperso.com/~flype/Pure ... usBeta.zip
Image
DominiqueB
Messages : 47
Inscription : sam. 01/mai/2004 14:41

Bonne question ?

Message par DominiqueB »

Cool, mais la je cale ! !

Il n'y a pas d'objet à libérer, le Calendar est une fenêtre donc elle est libérée par le closewindow()
Autrement j'avoue que j'ai une lacune sur ce point .
Après recherche, il semble qu'il faille un DestroyWindow_() avec le handle obtenu lors du CreateWindowEx(), mais n'est-ce pas ce que fait le closewindow() de Pure ?

La il nous faut de l'aide, j'utilise ce gadget sous forme de dll et si cela cause une perte de ressources alors il nous faut confirmation !

A+
Dominique
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je suis bien d'accord :roll:

en tout cas moi je fais un DeleteObject_( hCalendar )
à priori j'ai pas relevé de problème
mais chui pas sûr du tout...
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

réponse de freak sur le forum anglais :

http://purebasic.myforums.net/viewtopic.php?t=10821

C'est donc bien DestroyWindow_() qu'il faut utiliser :wink:
Image
DominiqueB
Messages : 47
Inscription : sam. 01/mai/2004 14:41

heu . .

Message par DominiqueB »

heu oui et non, car si on détruit la fenêtre (ce qui est le cas car on fait un closewindow()) la fenêtre étant détruite, les resources du calendar sont aussi libérées ?
"The DeleteObject function deletes a logical pen, brush, font, bitmap, region, or palette, freeing all system resources associated with the object. After the object is deleted, the specified handle is no longer valid."
En tout cas ce n'est pas DeleteObject.

C'est vrai que l'aide francaise n'est pas très locace :(
Syntaxe

CloseWindow(#Fenetre)
Description

Ferme la #Fenetre spécifiée.

Mais je penche pour utiliser comme tu le dis DestroyWindow(), car la fenêtre est créée par une fonction windows en direct, et pas par une fonction pure, donc à moins que CloseWindow() ne soit une facade de DestroyWindow() il vaut mieux utiliser cette dernière ?
Fred, si tu lis qu'est ce qu'on doit utiliser dans ce cas ?


Enfin j'essaie de comprendre :)
on a probablement raison tous les deux ?
Dominique
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: heu . .

Message par Chris »

DominiqueB a écrit :heu oui et non, car si on détruit la fenêtre (ce qui est le cas car on fait un closewindow()) la fenêtre étant détruite, les resources du calendar sont aussi libérées ?

Enfin j'essaie de comprendre :)
on a probablement raison tous les deux ?
Mon idée: c'est peut-être pas la bonne mais bon!!! :roll:
Ca sert à quoi, ce gadget?, sinon à récupérer ou à fournir une date!

Donc, à partir du moment ou tu as stocké les valeurs dont tu as besoin, qu'est-ce qui empèche de libérer les ressource?
Parce que, finalement, ce n'est ni plus ni moins qu'une boîte de dialogue un peu (beaucoup), améliorée.

Chris :)
Bernard
Messages : 23
Inscription : jeu. 22/janv./2004 8:56
Localisation : Le MANS (72)

Message par Bernard »

J'essaie d'utiliser la version beta sous windows 2000 or j'obtiens une boite sans message à par une croix blanche sur un rond rouge.

Si j'essaie de recréer la librairie à partir du source avec Tailbite j'ai l'erreur suivante : Line 172: SetWinBackGroundImage() is not a function, an array or linked list le canal de communication a été fermé

Est-il necessaire d'ajouter une librairie supplémentaire ?

Je precise que la version standard fonctionne bien.

Merci de vos précisions
Bernard
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Il me semble que c'est une fonction de PureTools.

Cherche sur le forum, l'adresse y est, il me semble.

Le lien sur le forum n'a plus l'air valide. Danilo a changé de version.
voila le nouveau lien :
http://danilo.purearea.net/PureTools_I_021.zip
Chris :)
Répondre