begin process at 2012 05 27 15:48:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > [DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: JOUER DES SONS MIDI)

[DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: JOUER DES SONS MIDI)


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :dll, picwin, dialog, double buffer, midi Niveau :Débutant Date de création :18/04/2009 Date de mise à jour :19/04/2009 17:02:09 Vu / téléchargé :1 913 / 25

Auteur : uaip

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour à tous :)

Je ne savais pas quoi faire hier, alors j'ai codé cette DLL. Elle n'en est qu'à la première version, assez foireuse ^^, mais personne n'a voulu la tester, alors je la poste pour avoir quelques avis/critiques avant d'aller un peu plus loin.
Pour le moment, elle permet de :
- dessiner sur une dialogbox, (rectangles, cercles, points, lignes, rectangles remplis) et d'écrire du texte
- modifier la couleur de fond d'un dialog
- associer le device de peinture à un double buffer (très pratique pour les dessins dynamiques (cf l'animation en exemple))
- bonus : jouer des sons MIDI en envoyant directement des instructions à la carte son du PC, via les APIs Windows
Testé sous Windows XP sp3.

Voir le screen pour se faire une idée (je vous conseille de télécharger et tester les 3 mélodies proposées en guise d'exemple :p).
Le fichier .mrc du screen est également disponible, à titre d'exemple.

!!! Attention attention !!!
La syntaxe des instructions envoyées à la dll n'est pas franchement optimisée, loin de là. Faites attention à vos commandes. Il devrait y avoir plus de sécurité la prochaine fois, mais je ne voulais pas faire ce boulot pour rien (si personne n'est intéressé).

Lire le fichier aide.txt pour obtenir les syntaxes des commandes possibles et les avertissements utiles.

N'hésitez pas à poser vos questions, j'avoue poster ça un peu "à l'arrache", je serai ouvert.lement disponible, à titre d'exemple.

Source

  • //Euh... c'est du code C/C++ donc ça sert à rien de poster tout le code...
  • //Allez, pour le fun, voici l'instruction pour écrire du texte
  • //Ecriture d'un texte
  • //Syntaxe: <RGB_text> <RGB_back> <taille> <x> <y> <"font"> <"text">
  • fct(Text) {
  • //Programme
  • char** spectok=split(data,"\"",0);
  • char** tok=split(spectok[0]," ",0);
  • int nbr_tok,nbr_spectok;
  • for(nbr_spectok=0;spectok[nbr_spectok] != NULL;nbr_spectok++) {}
  • for(nbr_tok=0;tok[nbr_tok] != NULL;nbr_tok++) {}
  • //Gestion d'erreurs
  • if ((nbr_tok != 5) || (nbr_spectok != 4)) { strcpy(data,"Circle: parameters: <RGB_text> <RGB_back> <size> <x> <y> <\"font\"> <\"text\">"); FreeTok(tok,nbr_tok); FreeTok(spectok,nbr_spectok); return 3; }
  • //Récupération des paramètres
  • int cc[]={atoi(tok[3]),atoi(tok[4]),0,0};
  • //Ajout de l'instruction dans la liste
  • ostringstream oss;
  • oss << tok[1] << "$" << spectok[1] << "$" << spectok[3];
  • string buff=oss.str();
  • CInstructions instr(TEXT,(int*)cc,(COLORREF)atoi(tok[0]),(char)atoi(tok[2]),buff);
  • I.push_back(instr);
  • //Libération des ressources
  • FreeTok(tok,nbr_tok);
  • FreeTok(spectok,nbr_spectok);
  • //Valeur de retour
  • InvalidateRect(hwnd,NULL,FALSE);
  • strcpy(data,"Circle: ok");
  • return 3;
  • }
//Euh... c'est du code C/C++ donc ça sert à rien de poster tout le code...
//Allez, pour le fun, voici l'instruction pour écrire du texte

//Ecriture d'un texte
//Syntaxe: <RGB_text> <RGB_back> <taille> <x> <y> <"font"> <"text">
fct(Text) {
	//Programme
	char** spectok=split(data,"\"",0);
	char** tok=split(spectok[0]," ",0);
	int nbr_tok,nbr_spectok;
	for(nbr_spectok=0;spectok[nbr_spectok] != NULL;nbr_spectok++) {}
	for(nbr_tok=0;tok[nbr_tok] != NULL;nbr_tok++) {}
	//Gestion d'erreurs
	if ((nbr_tok != 5) || (nbr_spectok != 4)) { strcpy(data,"Circle: parameters: <RGB_text> <RGB_back> <size> <x> <y> <\"font\"> <\"text\">"); FreeTok(tok,nbr_tok); FreeTok(spectok,nbr_spectok); return 3; }
	//Récupération des paramètres
	int cc[]={atoi(tok[3]),atoi(tok[4]),0,0};
	//Ajout de l'instruction dans la liste
	ostringstream oss;
	oss << tok[1] << "$" << spectok[1] << "$" << spectok[3];
	string buff=oss.str();
	CInstructions instr(TEXT,(int*)cc,(COLORREF)atoi(tok[0]),(char)atoi(tok[2]),buff);
	I.push_back(instr);
	//Libération des ressources
	FreeTok(tok,nbr_tok);
	FreeTok(spectok,nbr_spectok);
	//Valeur de retour
	InvalidateRect(hwnd,NULL,FALSE);
	strcpy(data,"Circle: ok");
	return 3;
}

 Conclusion

Propriétés de la dll:
codée sous Visual Studio 2005, API Windows
testée sous XP sp3
codée en C/C++

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

19 avril 2009 17:02:10 :
correction des erreurs concernant les messages d'erreurs, ajout de sécurité : la commande Create doit être appelée avant toute autre

 Sources du même auteur

Source avec Zip Source avec une capture [DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOG...
PHOTOS EN PV - DISCUT.NET

 Sources de la même categorie

Source avec Zip CRÉER DU MONDE SUR VOTRE SERVEUR IRC par Averell
AVOIR UNE LISTE D'UTILISATEUR EN COULEURS SELON LEURS SEXE P... par WorldDMT
COMMANDES FANTAISIES ( OP DEOP , VOICE DEVOICE ) ORIGINALES par Orona
Source avec Zip Source avec une capture CORRECTEUR par Orona
Source avec Zip Source avec une capture [DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOG... par uaip

 Sources en rapport avec celle ci

SPAMFILTER EN DIALOGUE POUR UNREALIRCD par Averell
Source avec Zip Source avec une capture LAZER (JEU EN PICWIN) par Zova
CONNEXION DES SERVEURS PROPOSÉE ET PERSONNALISÉ par XaDaZ
Source avec Zip Source avec une capture PACMAN ONLINE - 4 JOUEURS par wims
Source avec Zip Source avec une capture GEOTOOLS : GESTION D'UN UWORLD par PaDa

Commentaires et avis

Commentaire de pakofils_ le 19/04/2009 21:19:20

Hi!
ce qui est bizarre avec toi, c'est que tu descends franchement pas mal de sources lorsque ces dernieres sont moyennes etc etc alors pourquoi le fais tu en postant celle ci? pour que qq'un teste uniquement? inutile.. puisque pas finie
j'avoue ne pas te comprendre, d'ailleurs pour quoi faire, hormis denigrer tu ne fais rien d'autre, et ça se confirme par le si peu de sources que tu postes ici ^^
note: je n'en met pas, inutile ^^

Commentaire de uaip le 19/04/2009 21:35:32

Salut,
Alors, pour répondre (en toute sincérité). Avant de dire qu'elle n'est pas finie... l'as-tu testée ? Tu crois que le screen est une invention ? La dll marche très bien, pour une version beta. Quand je dis qu'elle n'est pas finie, c'est que j'ai plein d'idée de rajout à y faire. C'est pour ça que par convention, chaque programme a un numéro de version :) . A la différence des autres sources que l'on voit ici, moi je ne code pas pour moi. Je m'explique. Quand quelqu'un poste une source ici, en général elle est tirée de son script, du moins il s'en sert (ou il est succeptible de s'en servir).
Moi je ne fais pas de mIRC scripting, je fais cette DLL pour les scripteurs qui en auraient besoin. Et je trouverais ça bête pour moi de passer 4 mois à coder une DLL dont personne ne se servirait. Donc je code une version beta, je distribue, si elle plait tant mieux, et je la continue, sinon je laisse tomber.

Ensuite oui, je dénigre les codes que je trouve mauvais, mais j'explique pourquoi je les trouve mauvais. Personne ne t'empèche de critiquer ma source (si tu connais le C/C++) et de m'indiquer d'éventuelles optimisations, je suis ouvert à tout.

Je ne prends pas mal ton commentaire car je ne le considère pas comme insultant.

Quant au "si peu de source", je ne te permets pas de juger ^^. A mon actif, je dois avoir bien plus d'une centaine de sources, en tout genre (mIRC, tcl, Perl, php, html, SQL, C/C++, javascript, bash/sh, batch, etc etc) et si tu en voir, pas de soucis je te file mon portfolio en mp.

Bonne continuation.

Commentaire de ZeroOo le 21/04/2009 18:48:04

Disons que pour moi les fonctions de la DLL ne sont pas forcément très utiles quoique cela puisse un petit côté personnalisé aux dialogues et que je n'ai sûrement pas pensé à tous les côtés pratiques (tu aurais pu nous fournir un exemple).

Par contre fournir le code source serait, à mon avis, très utile pour tous ceux qui souhaitent développer un peu le côté DLL en mIRC.

Le commentaire de Pakofils_ me semble un peu mal venu.

Commentaire de uaip le 21/04/2009 20:15:23

Salut,
Il y non seulement un exemple, mais aussi le code source.
Concernant le développement de la DLL, on m'a déjà demandé quelques améliorations : j'ai déjà corrigé de nombreux beugs (dans cette version ci-présente, quand on mets une fenêtre par dessus le dialog et qu'on réaffiche le dialog, les dessins disparaissent, idem si on déplace le dialog hors de l'écran). J'ai corrigé tout ça.
J'ai également modifié la façon de rafraichir la fenêtre : l'utilisateur peut la rafraichir quand il le souhaite.
J'ai également ajouté un gestionnaire de sous-classement : l'utilisateur peut intercepter les événements move, paint, active, etc (qui complètent les événements de bases comme mouse, sclick, init, etc)
Je suis aussi en train de modifir pour pouvoir utiliser la DLL sur plusieurs dialog.
Bref, tout ça pour dire que je file le code source (dans le zip), tu peux le modifier à ton gré, mais si tu redistribues la DLL, j'aimerais bien être tenu au courant, par question de respect.
Tchoupi :)

Commentaire de dj328i le 01/05/2009 20:11:35

Bon , écoute l'idée de départ n'est pas mauvaise. Mais l'utilité n'est pas la. Seul le code-sources de la DLL a mon avis peut-etre utile pour ceux qui veulent parfaire leurs connaissances. C'est très bien de ce coté. Moi je le vois plus comme un tutorial que comme une source.

Ex si je prendrais ton DLL pour remplacé mes .wav dans mon projet actuel , le but serait de sauvé sur la taille des fichiers. Mais la taille du dll elle même serait plus grosse , que quesque je pourrais sauvé. Alors de mon coté pour moi c'est inutiles. peut-être pour qqn d'autre qui sais.

Ne te laisse pas abbatre , continue a travaillé et a apprendre.

Le fait de pouvoir dessiné dans un dialog , peut-être réalisé sans dll tu sais ? Il suffit de crée un @ sans bordure et de crée un alias qui attache un Window a un dialog sur une position précise selon la position de ce dernier dans l'écran.

Commentaire de uaip le 01/05/2009 20:41:25

Salut,
Si je l'ai faite, c'est que l'on me l'a demandé :)
Et non, dessiner dans un dialog ne peut pas être fait, non seulement ta solution (si j'ai bien compris) ressemble a du bricolage, mais en plus elle ne permet pas d'insérer des contrôles au milieu des zones de dessin. Ou alors j'ai mal compris ton exemple.
Pour information, une @window n'est rien autre qu'une dialogbox permettant le dessin. Si Khaled sépare les deux, c'est parce-que dessiner au milieu de contrôles est assez "difficile" quant au rafraichissement, et à l'implémentation. Ce que fait cette dll, ca serait trop "chiant" à gérer pour mIRC (vu que ce langage de scripting propose énormément d'autres choses).
Pour le MIDI, je suis d'accord, c'est plus un "bonus" qu'autre chose, pas très utile. Mais imaginons que tu veuilles faire un dialog de tablature ou autre, ce sera beaucoup plus utile et performant que d'avoir un dossier contenant 18 288 fichiers d'une note chacun (24*6*127=18288).
Au passage, certains me demandent d'avancer dans ce projet (ahah, c'est donc pas si inutile que ça :p) malheureusement je n'ai vraiment pas le temps en ce moment.
Tchoupi.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

dialog de Connection , help please [ par OthilA ] Voila , j'ai un system de connection mais j'aurais aimé qu'il évite de faire ceci* Your nickname is now t-* Your nickname is now ta-* Your nickname i File - Open Dialog ? Possible directement en script ? (ou DLL oblgatoire) [ par Nymouas ] Bonsoir,Je voudrais savoir s'il est possible de créer des open dialog en script irc (sans utiliser de dll) ?Si ce n'est pas possible, quelle dll me co Dialog + Picwin [ par DiGhan ] Bonjour,Voilà , j'ai plusieurs dialog, dans lequel je voudrais inclure des picwin.J'aimerais savoir comment faire pour bouger le dialog quand la title Aide pour ToolBar [ par Enops ] alias tb { dialog -m tb tb }alias ntb { dialog -x tb tb }dialog tb { title "ToolBar" size 0 30 1030 0 option pixels}on *:dialog:tb:init:*:{ dll dl Pb d'icone et d'affichage sur toolbar mdx [ par Kangta ] Bonjour , re encore moi et mes problemes !Donc j'&#233;tais entrain d'essay&#233; de faire une toolbar en mdx puis je suis tomb&#233; sur un os ! Car Aide toolbar + lagbar [ par Kangta ] Bonjour bonjour re encore moa et mes problemes&nbsp;dialog toolbar {&nbsp; size 0 1 800 50&nbsp; list 2,1 0 500 -200,size&nbsp; text "Salon" 4, 515 5 Bouton mouvant mdx [ par MaX_62 ] Voici un petit code que j'ai fait, je le poste pas dans les sources &#231;a serait un peu abus&#233; dialog sondage {&nbsp; title "Etes vous un bon sc dialog docké qui reste gris!!! [ par _Dams_ ] slt à tousalors voila mon problème.J'ai créer une dial avec un menu simple pour le moment et quand je veux la docké avec rebar.dll en haut de mon scri affichage pseudo notifié dans un dialog [ par blackpearlyse ] dialog msn {&nbsp; title "Alerte !!!!"&nbsp; option pixels&nbsp; size 825 600 170 100&nbsp; text "", 1, 0 5 170 27, center&nbsp; option dbu&nbsp; text docker dialog toolbar [ par MaX_62 ] Bonjour,Je cherche a docker un dialog dans la toolbar mIRC. J'ai deja essay&#233; avec RebaR.dll ainsi que UltraDock.dll mais j'ai pas r&#233;ussi Mer


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales