cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014
-
4 mai 2005 à 17:06
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
20 févr. 2007 à 00:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 20 févr. 2007 à 00:07
Tiens, je retombe sur cette source par hasard ^^
Et comme j'avais dis "Pour ma source, j'attendrais d'avoir fini le projet complet avant de poster, mais c'est déjà très aancé", bah, c'est pas encore fini du tout, mais si tu veux jetter un coup d'oeil au control HexViewer que j'ai codé, c'est par ici :
https://sourceforge.net/projects/hexeditorvb/
Peut être un peu le fouilli pour lancer les fichiers *.vbg (d'abord recompiler les ocx...etc), mais le code du controle HexViewer est facilement accessible.
@+ et bonne continuation^^
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 28 nov. 2006 à 13:38
Salut, ton code n'est pas mauvais ; c'est la méthode de traçage qui rend le tout peu fluide.
Je m'explique : dans mon controle, j'utilise la propriété MaskPicture pour stocker une seconde image (par exemple la sélection), et je ne redessine pas tout à chaque refresh (une des deux images provient du MaskPicture, l'autre est redessinnée).
Donc les traçages que tu proposes avec les APIs sont rapides, mais la méthode en elle même peut être améliorée.
Donc en fait, je suis convaincu que si tu utilisais MaskPicture, ton code serait largement plus optimisé que le mien.
Exemple, pour tracer la sélection, je fait Me.Line avec les coordonnées de la diagonale d'un rectangle, et çà je le fais pour chaque ligne entière sélectionnée et pour les 2 lignes (première et dernière) sélectionnées partiellement.
Donc, même si çà marche très bien, çà devrait pas faire le poids face aux APIs que tu utilises.
De même que le Me.Print "FF", UserControl.CurrentX=...
devant le TextOut.
Pour le clignotement, cà doit être possible de le supprimer, peut être bien avec (In)validRect.
Pour ma source, j'attendrais d'avoir fini le projet complet avant de poster, mais c'est déjà très aancé ^^
Merci, @+
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 28 nov. 2006 à 02:17
Normalement avec les API tu peux aller jusqu'a au moins 3x plus rapidement (mais c'est possible que certaines fonctions VB fasse bien l'affaire car elle peuvent regrouper plusieurs API en une mais derrière c'est les API qui travaillent quand même l'appel n'est que plus direct), en retravaillant le contrôle je pourrais facilement réparer les problèmes de clignotement (avec InvalidateRect ou même les buffers d'image (quoique en VB sa se complique un peu :P). Merci pour tes commentaires, mais comme je l'ai dit je ne travaillerai pas dessus, mais peut-être que quelqu'un d'autre plus intéressé lira les commentaires et trouvera tes bon conseils :) J'espère que tu posteras le tient bientôt ;)
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 27 nov. 2006 à 18:08
Oui, donc pour redire en plus condensé ce que j'ai dit : les APIs n'ont pas apporté grand chose à la vitesse (c'est pas très fluide).
Mais j'avoue que c'est le meilleur visualisateur actuellement présent sur VBfrance, on peut pas dire le contraire.
@+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 27 nov. 2006 à 18:00
Re, j'ai testé, plusieurs choses :
1) la méthode de prendre le fichier édité comme une variable string est une très très mauvaise idée ==> tu remplis ta RAM (et le SWAP) pour mettre en mémoire le fichier alors qu'il est bien plus judicieux d'obtenir les bytes directement dans le fichier, et uniquement les bytes que tu affiches (cela permet d'ouvrir instantanément n'importe quel fichier de n'importe quel taille)
2) ne marche QUE pour les fichiers de très faible taille
3) impossible de faire la sélection en bougeant le curseur de la souris VERS LE HAUT !
4) énormes clignotements de la sélection lors du déplacement de la vue
5) il s'avère que les APIs issues de gdi32 n'apportent rien : c'est peu fluide
Pour être honnête, il faudrait vraiment modifier les méthodes d'affichage (la sélection rame bcp trop) et complètement changer le mode d'accès au fichier (voir APIs CreateFile et ReadFile)...
Dans mon contrôle, je n'utilise AUCUNE API de dessin, je trace mes rectangles de sélection avec des UserControl.Line et c'est bien plus fluide et moins gourmand que ton code (donc c'est possible)
Une astuce : utilise la propriété MaskPicture de ton UserControl...
Donc pour conclure, il faut revoir tes méthodes de dessin, c'est pas fluide.
Cela dit, c'est le visualisateur hexa le plus souple (c'est à dire le plus agréable à utiliser) de vbfrance, et le seul qui possède une "vraie" sélection (pas limitée à la zone visualisée).
Donc même si c'est très loin de pouvoir rivaliser avec les composants de visualisation de code hexa professionnels (ce qui est tout à fait possible même en Visual Basic), c'est quand même du boulot et le résultat est relativement agréable.
En plus c'est commenté et identé.
Je ne note pas, mais bon courage.
@+
PS : oublie pas le Option Explicit en début de module, tu as oublié plein de déclarations de variables
PPS : Niveau Expert, peu être pas ! ;)
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 27 nov. 2006 à 17:38
Vive les API pour la vitesse :) Sinon ce n'est qu'un départ, ayant vu qu'a peu près aucun éditeur sur le site n'offre un système d'édition potable (j'ai vu 10 000 label au mieux) j'ai décidé de faire une base pour des personnes qui voudrais en créer 1 en se passant de bidouillerie tel que les labels. Ce code peut donc largement être améliorer. Mais je précise qu'il n'y aura jamais d'évolution car VB c'est finit pour moi (ainsi que les microsofterie qui son non portable).
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 27 nov. 2006 à 13:42
Tiens, un controle pour afficher des valeurs hexa ?
J'ai codé le mien pour l'éditeur hexa que je suis en train de créer, je vais pouvoir le comparer au tien ;) J 'ai hate de voir !
J'ai regarder que très rapidement le code (pas de Visual Studio sur mon PC en ce moment), et l'utilisation des APIs TextOut, FillRect, GetWindowRect... peut être judicieuse.
D'autant que le nombre de lignes de code de ton controle est assez faible... je pense que je vais pouvoir gagner en lignes de code et en vitesse avec FillRect notamment.
Je testerais ton code ce soir !
@+
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 9 mai 2005 à 17:39
.SelStart - 1 pour l'offset ;)
cs_JLN
Messages postés371Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention17 juin 2013 9 mai 2005 à 16:16
Si en plus on pouvait avoir offset, ce serait sympa... je note 10 pour encourager...
JLN
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 6 mai 2005 à 18:48
Si le titre de ta form est en anglais, alors pas d'accent! => 'Hexadecimal Editor'
Tu voulais des commentaires alors en veux-tu en voilà! :p
Sinon ta source est pas mal du tout
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 4 mai 2005 à 19:29
lol, il était là pour des tests, j'ai dû oublier de remplacer par App.path.
A+
odan71
Messages postés140Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention11 décembre 2007 4 mai 2005 à 18:38
le chemin de 'matrix.skn' n'est pas relatif, sinon ça marche nickel.
beau programme :)
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 4 mai 2005 à 17:06
Des petits commentaires ? En passant il peut être en lecture seule.
20 févr. 2007 à 00:07
Et comme j'avais dis "Pour ma source, j'attendrais d'avoir fini le projet complet avant de poster, mais c'est déjà très aancé", bah, c'est pas encore fini du tout, mais si tu veux jetter un coup d'oeil au control HexViewer que j'ai codé, c'est par ici :
https://sourceforge.net/projects/hexeditorvb/
Peut être un peu le fouilli pour lancer les fichiers *.vbg (d'abord recompiler les ocx...etc), mais le code du controle HexViewer est facilement accessible.
@+ et bonne continuation^^
28 nov. 2006 à 13:38
Je m'explique : dans mon controle, j'utilise la propriété MaskPicture pour stocker une seconde image (par exemple la sélection), et je ne redessine pas tout à chaque refresh (une des deux images provient du MaskPicture, l'autre est redessinnée).
Donc les traçages que tu proposes avec les APIs sont rapides, mais la méthode en elle même peut être améliorée.
Donc en fait, je suis convaincu que si tu utilisais MaskPicture, ton code serait largement plus optimisé que le mien.
Exemple, pour tracer la sélection, je fait Me.Line avec les coordonnées de la diagonale d'un rectangle, et çà je le fais pour chaque ligne entière sélectionnée et pour les 2 lignes (première et dernière) sélectionnées partiellement.
Donc, même si çà marche très bien, çà devrait pas faire le poids face aux APIs que tu utilises.
De même que le Me.Print "FF", UserControl.CurrentX=...
devant le TextOut.
Pour le clignotement, cà doit être possible de le supprimer, peut être bien avec (In)validRect.
Pour la méthode pour faire un éditeur hexa qui ne bouffe pas de RAM et qui puisse ouvrir un fichier de n'importe quelle taille, ceci est un bon exemple http://www.vbfrance.com/codes/ULTRA-HEXA-EDITEUR-HEXADECIMAL-NET-V2-OUVERTURE-SUPER_37077.aspx
(par contre je trouve ta méthode d'affichage meilleure)
Pour ma source, j'attendrais d'avoir fini le projet complet avant de poster, mais c'est déjà très aancé ^^
Merci, @+
28 nov. 2006 à 02:17
27 nov. 2006 à 18:08
Mais j'avoue que c'est le meilleur visualisateur actuellement présent sur VBfrance, on peut pas dire le contraire.
@+
27 nov. 2006 à 18:00
1) la méthode de prendre le fichier édité comme une variable string est une très très mauvaise idée ==> tu remplis ta RAM (et le SWAP) pour mettre en mémoire le fichier alors qu'il est bien plus judicieux d'obtenir les bytes directement dans le fichier, et uniquement les bytes que tu affiches (cela permet d'ouvrir instantanément n'importe quel fichier de n'importe quel taille)
2) ne marche QUE pour les fichiers de très faible taille
3) impossible de faire la sélection en bougeant le curseur de la souris VERS LE HAUT !
4) énormes clignotements de la sélection lors du déplacement de la vue
5) il s'avère que les APIs issues de gdi32 n'apportent rien : c'est peu fluide
Pour être honnête, il faudrait vraiment modifier les méthodes d'affichage (la sélection rame bcp trop) et complètement changer le mode d'accès au fichier (voir APIs CreateFile et ReadFile)...
Dans mon contrôle, je n'utilise AUCUNE API de dessin, je trace mes rectangles de sélection avec des UserControl.Line et c'est bien plus fluide et moins gourmand que ton code (donc c'est possible)
Une astuce : utilise la propriété MaskPicture de ton UserControl...
Donc pour conclure, il faut revoir tes méthodes de dessin, c'est pas fluide.
Cela dit, c'est le visualisateur hexa le plus souple (c'est à dire le plus agréable à utiliser) de vbfrance, et le seul qui possède une "vraie" sélection (pas limitée à la zone visualisée).
Donc même si c'est très loin de pouvoir rivaliser avec les composants de visualisation de code hexa professionnels (ce qui est tout à fait possible même en Visual Basic), c'est quand même du boulot et le résultat est relativement agréable.
En plus c'est commenté et identé.
Je ne note pas, mais bon courage.
@+
PS : oublie pas le Option Explicit en début de module, tu as oublié plein de déclarations de variables
PPS : Niveau Expert, peu être pas ! ;)
27 nov. 2006 à 17:38
27 nov. 2006 à 13:42
J'ai codé le mien pour l'éditeur hexa que je suis en train de créer, je vais pouvoir le comparer au tien ;) J 'ai hate de voir !
J'ai regarder que très rapidement le code (pas de Visual Studio sur mon PC en ce moment), et l'utilisation des APIs TextOut, FillRect, GetWindowRect... peut être judicieuse.
D'autant que le nombre de lignes de code de ton controle est assez faible... je pense que je vais pouvoir gagner en lignes de code et en vitesse avec FillRect notamment.
Je testerais ton code ce soir !
@+
9 mai 2005 à 17:39
9 mai 2005 à 16:16
JLN
6 mai 2005 à 18:48
Tu voulais des commentaires alors en veux-tu en voilà! :p
Sinon ta source est pas mal du tout
4 mai 2005 à 19:29
A+
4 mai 2005 à 18:38
beau programme :)
4 mai 2005 à 17:06