cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 2007
-
23 nov. 2004 à 11:47
saradion
Messages postés25Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention 2 décembre 2008
-
17 mai 2007 à 19:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
saradion
Messages postés25Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention 2 décembre 2008 17 mai 2007 à 19:40
merci pour le code c tré gentil
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 25 janv. 2005 à 11:45
modif effectuée dans
int BMsgBoxChoix::messageBoxChoixIndirect(BMsgBoxChoix::MBSTRUCT* lpmbs)
avant
if(!bInitialized)
init();
insérer
/// algo : check du parent, récup mm si non spécifié.
if(lpmbs->hWnd==NULL)
{
HWND plomp=GetFocus();
if(plomp!=NULL)
lpmbs->hWnd=plomp;
}
Magicalement
PS ici, vous n'avez pas le 'BMsgBoxChoix::'
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 25 janv. 2005 à 11:19
soluce au pb de semi amodalité:
utiliser GetFocus() ou GetParent()
merci BruNews.
Bruno.
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 25 janv. 2005 à 10:41
Bj
j'ai repris cette classe et l'ai adapté pr VC6
je vais la reprendre pour prendre en cpte les modifs récentes.... merci à toi BN....
publication prochaine....
pour la contrib la lib est dc adaptée VC6,
intégrée dans des classes (ça fait plus propre)
et surtout elle a une nouvelle interface d'acces (2 en fait), basée sur les nombres de paramètres variable !
switch(BVisuel::msgBoxChoix("Choix de la Base de Donnee ","Veuillez choisir la BD désirée","Locale","serveur temporaire","serveur final",0))
{
...
}
pour traduire les param variables :
actuellement, je suis passé par mes BLBString, (liste de chaines) [contenues dans ma sourse BListeIndir]
si vous avez un moyen d'intégrer ça simlement avec les TString je suis preneur
Magicalement
Nono.
PS :
bug constaté (j'ai pas checké si ça a été réglé plus haut) :
La boite crée est modale (ce qui correspond bien au fonctionnement voulu)
mais modale seulement pour la fonction en cours
cependant, elle a un comportement amodale si cette fonction a été lancée depuis une fenêtre.
cad la fenêtre appelante est activable !!!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 29 nov. 2004 à 15:17
La mise en variable sur pile d'un iterateur n'est pas forcement systematique, mais bon...
gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010 29 nov. 2004 à 14:11
D'accord. Merci!
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 29 nov. 2004 à 12:28
Oui. Par exemple si tu fais une boucle for(i =0...) le compilateur va utiliser une variable locale (sur la pile) alors qu'en fait on peut utiliser une registre
gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010 28 nov. 2004 à 20:15
"plus efficace que ce que donne le compilo " veut dire quoi? Plus rapide?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 28 nov. 2004 à 15:30
Bien sur que je pouvais le faire en C, mais ce genre de boucle est assez facile à écrire en asm, et plus efficace que ce que donne le compilo (a condition de bien les écrire, ce que je n'avais pas fait du premier coup)
gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010 27 nov. 2004 à 09:24
Salut.
Dites-moi, ce petit bout de code en ASM, n'y a-t-il pas d'equivalence en C/C++? Ou on est obligé de passer par celà?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 26 nov. 2004 à 10:19
OK
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 25 nov. 2004 à 13:03
A l'air correct, ensuite si tu devais employer ces fonctions dans un prog ou elles seraient tres souvent utilisees, je te conseille (pour les perfs) de les transformer en macros par '__inline', aucun prob puisqu'elles n'utilisent que les 3 registres generaux. Faudra par contre en modifier l'entete, regarde exemple sur ma bnstrcpy.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 25 nov. 2004 à 10:21
Devrait suffire en 3 fois, je jetterai un oeil des que possible.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 25 nov. 2004 à 10:07
BruNews> Voila j'ai essayer d'appliquer ce que t'as dit. J'ai déroulé trois fois les boucles, mais sur 127 octets je pouvais le faire environ dix fois, ca fait un peu beaucoup non?
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 23 nov. 2004 à 21:32
hmm, ça m'a l'air d'avoir des avantages pratique mon pti vecchio...vai jetter un oeil :-))
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 nov. 2004 à 14:27
MEME emplacement memoire relu 3 fois alors que EDX non utilise !!!
Mets aussi les valeurs en place de '\n' sinon intransportable dans MASM.
On change:
__declspec(naked) int __fastcall LineSize(LPCTSTR lpText)
{ // ECX = lpText, ne pas changer sert calcul final en 1 cycle
__asm {
mov dl, [ecx]
mov eax, ecx ; eax avancera
next:
cmp dl, 10 ; '\n'
je short fin
cmp dl, 13 ; '\r'
je short fin
test dl, dl ; NULL fin de chaine
je short fin
inc eax
mov dl, [eax]
jmp short next
fin:
sub eax, ecx
ret 0
}
}
Des lignes de texte pouvant parfois etre tres longues, faudrait derouler les boucles, en 3 fois est generalement un bon compromis pour rester dans une plage de 127 octets.
Vois pour les autres si besoin d'applique ce principe.
17 mai 2007 à 19:40
25 janv. 2005 à 11:45
int BMsgBoxChoix::messageBoxChoixIndirect(BMsgBoxChoix::MBSTRUCT* lpmbs)
avant
if(!bInitialized)
init();
insérer
/// algo : check du parent, récup mm si non spécifié.
if(lpmbs->hWnd==NULL)
{
HWND plomp=GetFocus();
if(plomp!=NULL)
lpmbs->hWnd=plomp;
}
Magicalement
PS ici, vous n'avez pas le 'BMsgBoxChoix::'
25 janv. 2005 à 11:19
utiliser GetFocus() ou GetParent()
merci BruNews.
Bruno.
25 janv. 2005 à 10:41
j'ai repris cette classe et l'ai adapté pr VC6
je vais la reprendre pour prendre en cpte les modifs récentes.... merci à toi BN....
publication prochaine....
pour la contrib la lib est dc adaptée VC6,
intégrée dans des classes (ça fait plus propre)
et surtout elle a une nouvelle interface d'acces (2 en fait), basée sur les nombres de paramètres variable !
dont voici les protos :
int BMsgBoxChoix::messageBoxChoix(HWND hWnd, HINSTANCE hInstance, const char* lpText, const char* lpCaption, HICON hIcon, HFONT hFont, DWORD dwStyle,const char* txtPremierBouton,...);
int BMsgBoxChoix::messageBoxChoix(HWND hWnd, HINSTANCE hInstance, const char* lpText, const char* lpCaption, HICON hIcon, HFONT hFont, DWORD dwStyle,const BString& txtPremierBouton,...);
en plus de ça, ma lib d'interface fait l'interface (lol) avec une fonction de ce proto:
int BVisuel::msgBoxChoix(const char *titre, const char *intro, const char *premiereReponse, ...);
l'utilisation en est simplifiée à l'extrème :
switch(BVisuel::msgBoxChoix("Choix de la Base de Donnee ","Veuillez choisir la BD désirée","Locale","serveur temporaire","serveur final",0))
{
...
}
pour traduire les param variables :
actuellement, je suis passé par mes BLBString, (liste de chaines) [contenues dans ma sourse BListeIndir]
si vous avez un moyen d'intégrer ça simlement avec les TString je suis preneur
Magicalement
Nono.
PS :
bug constaté (j'ai pas checké si ça a été réglé plus haut) :
La boite crée est modale (ce qui correspond bien au fonctionnement voulu)
mais modale seulement pour la fonction en cours
cependant, elle a un comportement amodale si cette fonction a été lancée depuis une fenêtre.
cad la fenêtre appelante est activable !!!
29 nov. 2004 à 15:17
29 nov. 2004 à 14:11
29 nov. 2004 à 12:28
28 nov. 2004 à 20:15
28 nov. 2004 à 15:30
27 nov. 2004 à 09:24
Dites-moi, ce petit bout de code en ASM, n'y a-t-il pas d'equivalence en C/C++? Ou on est obligé de passer par celà?
26 nov. 2004 à 10:19
25 nov. 2004 à 13:03
25 nov. 2004 à 10:21
25 nov. 2004 à 10:07
23 nov. 2004 à 21:32
23 nov. 2004 à 14:27
Mets aussi les valeurs en place de '\n' sinon intransportable dans MASM.
On change:
__declspec(naked) int __fastcall LineSize(LPCTSTR lpText)
{ // ECX = lpText, ne pas changer sert calcul final en 1 cycle
__asm {
mov dl, [ecx]
mov eax, ecx ; eax avancera
next:
cmp dl, 10 ; '\n'
je short fin
cmp dl, 13 ; '\r'
je short fin
test dl, dl ; NULL fin de chaine
je short fin
inc eax
mov dl, [eax]
jmp short next
fin:
sub eax, ecx
ret 0
}
}
Des lignes de texte pouvant parfois etre tres longues, faudrait derouler les boucles, en 3 fois est generalement un bon compromis pour rester dans une plage de 127 octets.
Vois pour les autres si besoin d'applique ce principe.