begin process at 2010 03 11 12:28:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > [DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOGBOX MIRC

[DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOGBOX MIRC


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :librairy, ScintillamIRC dll, Scintilla, richedit, contrôle Niveau :Débutant Date de création :16/02/2009 Date de mise à jour :23/02/2009 21:55:25 Vu / téléchargé :1 207 / 19

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,
Ne sachant pas trop quoi faire pour ma première DLL, je me suis dit qu'il pouvait être bon d'offrir la possibilité aux scripteurs d'utiliser un nouveau contrôle sur leurs dialogboxes : il s'agit d'une sorte de richedit conçu spécialement pour les éditeurs de texte. Il peut être utile pour "remplacer" l'éditeur de scripts de mIRC ou créer des addons, et peut combler le manque de DCX.dll quant aux richedits.
Ce projet est une simple adaptation pour mIRC du projet Scintilla, libre et open source, utilisé pour la programmation compilée de parsers et éditeurs.
Je sais que la programmation d'un tel contrôle n'est déjà pas évidente pour un programmeur C/C++, alors j'ai voulu faire quelque chose de très simple pour les scripteurs.
En bref, ce contrôle permet :
- coloration syntaxique du texte selon le lexique de mIRC ou un lexique prédéfini par le scripteur
- surbrillance des accolades et balises ouverts
- folding (affichage/masquage de blocs)
- affichage des numéros de lignes
- modification de la sélection
- zoom de la zone de texte
- guides d'indentation
- affichage de caractères invisibles (fins de lignes, tabulations, espaces, etc)
et bien d'autres fonctions utiles à un éditeur de texte :
- ajout de texte
- rechercher avancée de texte (sélection automatique ou fenêtre d'information, comme dans le bloc note)
- annuler/refaire dernière action
- remplacement de la sélection
- retrouver une ligne en fonction d'une position ou l'inverse
- retrouver un caractère selon la position
- sélectionner du texte
etc...

Pour faciliter le scripting, ce contrôle renvoit des notifications au travers d'une alias callback. Il est donc possible de détecter :
- ajout de caractère
- clic de souris (pour le folding)
- double-clic
- mise en surbrillance
- zoom
- modification du texte (insertion ou suppression de texte)

Un fichier d'aide au format xhtml est disponible dans le zip, ainsi que 3 exemples (niveaux débutant, intermédiaire et initié), également visibles ci-dessous.
L'aide, bien que peu ergonomique (désolé, le xhtml n'est pas mon fort) est également visible en ligne sur http://uaipcreations.ovh.org/Aide_Scintilla_mIRC.h tm

Attention, c'est une version d'essai, il m'est arrivé parfois de faire planter mIRC, je ne sais pas pourquoi. J'attends vos commentaires pour éventuellement corriger. De plus, la vérification syntaxique des procédures envoyées à la DLL est assez succinte, donc mettre du texte à la place d'un chiffre peut éventuellement poser problème (cette DLL a été codée en 1 jour ^^).

Source

  • /*
  • * Aliases de racourci
  • */
  • ;Alias d'appel
  • alias -l b {
  • if ($isid) return $dll(Scintilla_mIRC.dll,$1,$2-)
  • else echo -a $dll(Scintilla_mIRC.dll,$1,$2-)
  • }
  • ;Alias de déchargement de la DLL
  • alias unload_Scintilla dll -u Scintilla_mIRC.dll
  • /*
  • * Test 1 (niveau débutant)
  • */
  • ;Alias d'ouverture du dialog
  • alias test_1 dialog -m test_Scintilla1 test_Scintilla1
  • ;Boite de dialogue
  • dialog test_Scintilla1 {
  • title "Test Scintilla (niveau débutant)"
  • option dbu
  • size -1 -1 300 180
  • button "Insérer du texte", 2, 80 155 60 20
  • button "Rechercher du texte", 3, 156 155 60 20
  • }
  • ;Gestion d'événement "normaux"
  • on *:dialog:test_Scintilla1:*:*:{
  • if ($devent == init) {
  • ;Création du contrôle Scintilla d'id "1", de fonction callback "callback1" et de style "clientedge"
  • b SciCreate $dialog($dname).hwnd > 1 > callback1 > staticedge
  • ;Redimentionnement du contrôle
  • b SciSetPos -s 300 150
  • ;Affichage des numéros de lignes
  • b SciSetMarge -l 35
  • }
  • ;Clic sur un bouton
  • elseif ($devent == sclick) {
  • ;Bouton d'insertion de texte
  • if ($did == 2) {
  • ;Demande de saisie du texte à insérer
  • var %a = $?"Taper le texte à insérer:"
  • ;Insertion du texte
  • b SciReplaceSel %a
  • }
  • ;Bouton de recherche de texte
  • elseif ($did == 3) {
  • var %a = $?"Taper le texte à rechercher:"
  • b SciFindText -i %a
  • }
  • }
  • elseif ($devent == close) {
  • ;Déchargement de la DLL lors de la fermetuire de la dialogbox
  • .timerSc 1 1 unload_Scintilla
  • }
  • }
  • ;Alias callback envoyée à la DLL pour gérer les événement du composant
  • alias callback1 {
  • ;Détection d'un doubl-clic
  • if ($2 == DoubleClick) echo -a Tu as double-cliqué sur la ligne: $3
  • ;Détection d'un ajout de caractère
  • elseif ($2 == CharAdded) echo -a Tu as ajouté le caractère: $3
  • ;Détection d'une insertion de texte
  • elseif (($2 == Modified) && ($3 == InsertText)) echo -a Tu as inséré $6 lignes à la position $4 $+ , de texte: $7-
  • }
  • /*
  • * Test 2 (niveau intermédiaire)
  • */
  • ;Alias d'ouverture du dialog
  • alias test_2 dialog -m test_Scintilla2 test_Scintilla2
  • ;Boite de dialogue
  • dialog test_Scintilla2 {
  • title "Test Scintilla (niveau intermédiaire)"
  • option dbu
  • size -1 -1 300 180
  • button "Afficher la selection", 2, 10 155 60 20
  • edit "", 3, 80 155 210 20, multi return vsbar
  • }
  • ;Gestion d'événement "normaux"
  • on *:dialog:test_Scintilla2:*:*:{
  • if ($devent == init) {
  • ;Création du contrôle Scintilla d'id "1", de fonction callback "callback1" et de style "clientedge"
  • b SciCreate $dialog($dname).hwnd > 1 > callback2 > clientedge
  • ;Redimentionnement du contrôle
  • b SciSetPos -s 300 150
  • ;Affichage des numéros de lignes
  • b SciSetMarge -l 35
  • ;Affichage du folder
  • b SciSetMarge -f 20 $rgb(100,100,100) circle
  • ;Modification de la couleur de selection et remplissage
  • b SciSetSelStyle $rgb(230,230,230) fill
  • ;Modification de la couleur de la ligne contenant le curseur
  • b SciSetLineCursor $rgb(255,255,200)
  • ;Mise en place d'une ligne verticale
  • b SciSetVerticalLine 75 $rgb(200,200,200)
  • ;Surlignement des brackets ({ et }) et tags (< et >) lorsque le curseur est dessus
  • b SciSetHL -bu $rgb(255,0,0) $rgb(255,255,200)
  • ;Zoom de 1 (échelle: -10 à 20)
  • b SciSetZoom 1
  • ;Indentation avec espaces, marqués par des lignes verticales
  • b SciSetIndentGuide -s 4 $rgb(255,0,0) $rgb(0,0,0) lookboth
  • ;Texte
  • b SciSetText alias pouet $chr(123)
  • b SciAddLine if (%a) $chr(123)
  • b SciAddLine echo -a La variable existe
  • b SciAddLine write fichier.txt Valeur : $+(%,a)
  • b SciAddLine $chr(125)
  • b SciAddLine else exit
  • b SciAddLine $chr(125)
  • ;Auto-indentation
  • b SciAutoIndent
  • ;Choix de caractères de fins de lignes : LF
  • ;Cela permet de récupérer et d'afficher du texte compatible avec les normes des
  • ;editbox de mIRC
  • b SciSetEOL crlf
  • }
  • ;Clic sur le bouton d'affichage de la selection
  • elseif (($devent == sclick) && ($did == 2)) {
  • ;Récupération du texte selectionné
  • var %buffer = $b(SciGetSelText,.)
  • ;Affichage du texte selectionné dans l'editbox
  • if (%buffer == $null) did -ra $dname 3 aucune selection
  • else did -ra $dname 3 %buffer
  • }
  • elseif ($devent == close) {
  • ;Déchargement de la DLL lors de la fermeture de la dialogbox
  • .timerSc 1 1 unload_Scintilla
  • }
  • }
  • ;Alias callback envoyée à la DLL pour gérer les événement du composant
  • alias callback2 {
  • ;Détection d'un clic sur la marge de folding
  • if ($2 == MarginClick) b SciToggle $3
  • }
  • /*
  • * Test 3 (niveau initié)
  • */
  • ;Alias d'ouverture du dialog
  • alias test_3 dialog -m test_Scintilla3 test_Scintilla3
  • ;Boite de dialogue
  • dialog test_Scintilla3 {
  • title "Test Scintilla (niveau initié)"
  • option dbu
  • size -1 -1 300 180
  • menu "&Fichier", 1001
  • item "A vous de jouer ;-)", 1101, 1001
  • menu "&Edtition", 1002
  • item "Annuler", 1201, 1002
  • item "Refaire", 1202, 1002
  • item break, 1203, 1002
  • item "Selectionner tout", 1209, 1002
  • item "Supprimer tout", 1210, 1002
  • item break, 1211, 1002
  • item "Rechercher", 1204, 1002
  • item "Rechercher suivant", 1205, 1002
  • item "Ateindre...", 1206, 1002
  • item break, 1207, 1002
  • item "Insérer l'heure", 1208, 1002
  • menu "&Affichage", 1003
  • item "Afficher/cacher ouleurs", 1301, 1003
  • item break, 1302, 1003
  • menu "Fins de ligne", 1303, 1003
  • item "CR", 2301, 1303
  • item "LF", 2302, 1303
  • item "CRLF", 2303, 1303
  • item break, 2304, 1303
  • item "Afficher/cacher", 2305, 1303
  • item "Afficher/cacher guide d'indentation", 1304, 1003
  • item "Afficher/cacher ligne verticale", 1305, 1003
  • item "Afficher/cacher espaces", 1306, 1003
  • menu "&?", 1004
  • item "A propos...", 1401, 1004
  • }
  • ;Gestion d'événement "normaux"
  • on *:dialog:test_Scintilla3:*:*:{
  • if ($devent == init) {
  • b SciCreate $dialog($dname).hwnd > 1 > callback3 > clientedge staticedge
  • b SciSetPos -s 300 180
  • b SciSetMarge -l 35
  • b SciSetMarge -f 20 $rgb(100,100,100)
  • b SciSetSelStyle $rgb(230,230,230) fill
  • b SciSetLineCursor $rgb(255,255,200)
  • b SciSetVerticalLine 75 $rgb(200,200,200)
  • set %lvert 1
  • b SciSetHL -bu $rgb(255,0,0) $rgb(255,255,200)
  • b SciSetZoom 1
  • b SciSetIndentGuide -s 2 $rgb(255,0,0) $rgb(255,255,255) lookforward
  • set %gindent 1
  • b SciSetWord_mIRC 1
  • b SciSetColor default $rgb(0,0,0) $rgb(255,255,255) 0 0 0
  • b SciSetColor comment $rgb(130,140,230) $rgb(255,255,255) 0 0 0
  • b SciSetColor regex $rgb(160,30,160) $rgb(255,255,255) 0 0 0
  • b SciSetColor group $rgb(0,180,0) $rgb(255,255,255) 0 0 0
  • b SciSetColor operator $rgb(255,0,0) $rgb(255,255,255) 0 0 0
  • b SciSetColor number $rgb(245,70,245) $rgb(255,255,255) 0 0 0
  • b SciSetColor word $rgb(160,30,160) $rgb(255,255,255) 0 1 0
  • b SciSetColor word2 $rgb(0,0,160) $rgb(255,255,255) 1 0 0
  • b SciSetColor quote $rgb(0,0,255) $rgb(255,255,255) 0 0 0
  • set %color 0
  • b SciShowColor 1
  • ;Texte
  • b SciSetText alias pouet $chr(123)
  • b SciAddLine if (%a) $chr(123)
  • b SciAddLine echo -a La variable existe
  • b SciAddLine write fichier.txt Valeur : $+(%,a)
  • b SciAddLine $chr(125)
  • b SciAddLine else exit
  • b SciAddLine $chr(125)
  • ;Auto-indentation
  • b SciAutoIndent
  • ;Caractères de fin de ligne
  • b SciSetEOL crlf
  • set %ws 1
  • }
  • elseif ($devent == menu) {
  • if ($did == 1401) var %a = $?!"Scintilla_mIRC.dll - WINKEL Vincent"
  • ;On vérifie qu'on peut effectuer un UNDO puis on le fait si on peut
  • else if (($did == 1201) && ($b(SciCanUndo))) .b SciUndo
  • ;On vérifie qu'on peut effectuer un REDO puis on le fait si on peut
  • elseif (($did == 1202) && ($b(SciCanRedo))) .b SciRedo
  • ;Selection de tout le texte
  • elseif ($did == 1209) .b SciSelectAll
  • ;Suppression de tout le texte
  • elseif ($did == 1210) { if ($?!"Etes-vous sûr(e) de vouloir tout supprimer ?") .b SciClearAll }
  • ;Rechercher...
  • if ($did == 1204) {
  • ;Récupération du texte à chercher
  • set %find_text $?"Saisissez le texte à rechercher:"
  • ;Demande de recherche
  • .b SciFindText -ai %find_text
  • }
  • ;Rechercher le suivant
  • if ($did == 1205) .b SciFindText -i %find_text
  • ;Atteindre la ligne...
  • if ($did == 1206) { var %line = $?"Ligne ?" | if (%line isnum) .b SciGoToLine %line }
  • ;Insérer l'heure
  • if ($did == 1208) .b SciReplaceSel $time
  • ;Affichage des couleurs
  • if ($did == 1301) { .b SciShowColor %color | set %color $iif(%color == 1,0,1) }
  • ;Caractères de fin de lignes
  • if ($did == 2301) .b SciSetEOL cr
  • if ($did == 2302) .b SciSetEOL lf
  • if ($did == 2303) .b SciSetEOL crlf
  • if ($did == 2305) .b SciSetShowEOL $iif($b(SciGetShowEOL,.),0,1)
  • ;Guide d'indentation
  • if ($did == 1304) { .b SciSetIndentGuide $iif(%gindent == 1,-h,-s 2 $rgb(255,0,0) $rgb(255,255,255) lookboth) | set %gindent $iif(%gindent == 1,0,1) }
  • ;Ligne verticale
  • if ($did == 1305) { .b SciSetVerticalLine $iif(%lvert == 1,-1 $rgb(255,255,255),75 $rgb(200,200,200)) | set %lvert $iif(%lvert == 1,0,1) }
  • ;Espaces
  • if ($did == 1306) { .b SciSetShowWS %ws | set %ws $iif(%ws == 1,0,1) }
  • }
  • elseif ($devent == close) {
  • ;Déchargement de la DLL lors de la fermeture de la dialogbox
  • .timerSc 1 1 unload_Scintilla
  • }
  • }
  • ;Alias callback envoyée à la DLL pour gérer les événement du composant
  • alias callback3 {
  • echo 3 -a $1-
  • ;Détection d'un clic sur la marge de folding
  • if ($2 == MarginClick) b SciToggle $3
  • }
  • ;End of file
/*
* Aliases de racourci
*/

;Alias d'appel
alias -l b {
  if ($isid) return $dll(Scintilla_mIRC.dll,$1,$2-)
  else echo -a $dll(Scintilla_mIRC.dll,$1,$2-)
}

;Alias de déchargement de la DLL
alias unload_Scintilla dll -u Scintilla_mIRC.dll


/*
* Test 1 (niveau débutant)
*/

;Alias d'ouverture du dialog
alias test_1 dialog -m test_Scintilla1 test_Scintilla1

;Boite de dialogue
dialog test_Scintilla1 {
  title "Test Scintilla (niveau débutant)"
  option dbu
  size -1 -1 300 180
  button "Insérer du texte", 2, 80 155 60 20
  button "Rechercher du texte", 3, 156 155 60 20
}

;Gestion d'événement "normaux"
on *:dialog:test_Scintilla1:*:*:{
  if ($devent == init) {
    ;Création du contrôle Scintilla d'id "1", de fonction callback "callback1" et de style "clientedge"
    b SciCreate $dialog($dname).hwnd > 1 > callback1 > staticedge
    ;Redimentionnement du contrôle
    b SciSetPos -s 300 150
    ;Affichage des numéros de lignes
    b SciSetMarge -l 35
  }
  ;Clic sur un bouton
  elseif ($devent == sclick) {
    ;Bouton d'insertion de texte
    if ($did == 2) {
      ;Demande de saisie du texte à insérer
      var %a = $?"Taper le texte à insérer:"
      ;Insertion du texte
      b SciReplaceSel %a
    }
    ;Bouton de recherche de texte
    elseif ($did == 3) {
      var %a = $?"Taper le texte à rechercher:"
      b SciFindText -i %a
    }
  }
  elseif ($devent == close) {
    ;Déchargement de la DLL lors de la fermetuire de la dialogbox
    .timerSc 1 1 unload_Scintilla
  }
}

;Alias callback envoyée à la DLL pour gérer les événement du composant
alias callback1 {
  ;Détection d'un doubl-clic
  if ($2 == DoubleClick) echo -a Tu as double-cliqué sur la ligne: $3
  ;Détection d'un ajout de caractère
  elseif ($2 == CharAdded) echo -a Tu as ajouté le caractère: $3
  ;Détection d'une insertion de texte
  elseif (($2 == Modified) && ($3 == InsertText)) echo -a Tu as inséré $6 lignes à la position $4 $+ , de texte: $7-
}


/*
* Test 2 (niveau intermédiaire)
*/

;Alias d'ouverture du dialog
alias test_2 dialog -m test_Scintilla2 test_Scintilla2

;Boite de dialogue
dialog test_Scintilla2 {
  title "Test Scintilla (niveau intermédiaire)"
  option dbu
  size -1 -1 300 180
  button "Afficher la selection", 2, 10 155 60 20
  edit "", 3, 80 155 210 20, multi return vsbar
}

;Gestion d'événement "normaux"
on *:dialog:test_Scintilla2:*:*:{
  if ($devent == init) {
    ;Création du contrôle Scintilla d'id "1", de fonction callback "callback1" et de style "clientedge"
    b SciCreate $dialog($dname).hwnd > 1 > callback2 > clientedge
    ;Redimentionnement du contrôle
    b SciSetPos -s 300 150
    ;Affichage des numéros de lignes
    b SciSetMarge -l 35
    ;Affichage du folder
    b SciSetMarge -f 20 $rgb(100,100,100) circle
    ;Modification de la couleur de selection et remplissage
    b SciSetSelStyle $rgb(230,230,230) fill
    ;Modification de la couleur de la ligne contenant le curseur
    b SciSetLineCursor $rgb(255,255,200)
    ;Mise en place d'une ligne verticale
    b SciSetVerticalLine 75 $rgb(200,200,200)
    ;Surlignement des brackets ({ et }) et tags (< et >) lorsque le curseur est dessus
    b SciSetHL -bu $rgb(255,0,0) $rgb(255,255,200)
    ;Zoom de 1 (échelle: -10 à 20)
    b SciSetZoom 1
    ;Indentation avec espaces, marqués par des lignes verticales
    b SciSetIndentGuide -s 4 $rgb(255,0,0) $rgb(0,0,0) lookboth
    ;Texte
    b SciSetText alias pouet $chr(123)
    b SciAddLine if (%a) $chr(123)
    b SciAddLine echo -a La variable existe
    b SciAddLine write fichier.txt Valeur : $+(%,a)
    b SciAddLine $chr(125)
    b SciAddLine else exit
    b SciAddLine $chr(125)
    ;Auto-indentation
    b SciAutoIndent
    ;Choix de caractères de fins de lignes : LF
    ;Cela permet de récupérer et d'afficher du texte compatible avec les normes des
    ;editbox de mIRC
    b SciSetEOL crlf
  }
  ;Clic sur le bouton d'affichage de la selection
  elseif (($devent == sclick) && ($did == 2)) {
    ;Récupération du texte selectionné
    var %buffer = $b(SciGetSelText,.)
    ;Affichage du texte selectionné dans l'editbox
    if (%buffer == $null) did -ra $dname 3 aucune selection
    else did -ra $dname 3 %buffer
  }
  elseif ($devent == close) {
    ;Déchargement de la DLL lors de la fermeture de la dialogbox
    .timerSc 1 1 unload_Scintilla
  }

}

;Alias callback envoyée à la DLL pour gérer les événement du composant
alias callback2 {
  ;Détection d'un clic sur la marge de folding
  if ($2 == MarginClick) b SciToggle $3
}


/*
* Test 3 (niveau initié)
*/

;Alias d'ouverture du dialog
alias test_3 dialog -m test_Scintilla3 test_Scintilla3

;Boite de dialogue
dialog test_Scintilla3 {
  title "Test Scintilla (niveau initié)"
  option dbu
  size -1 -1 300 180

  menu "&Fichier", 1001
  item "A vous de jouer ;-)", 1101, 1001

  menu "&Edtition", 1002
  item "Annuler", 1201, 1002
  item "Refaire", 1202, 1002
  item break, 1203, 1002
  item "Selectionner tout", 1209, 1002
  item "Supprimer tout", 1210, 1002
  item break, 1211, 1002
  item "Rechercher", 1204, 1002
  item "Rechercher suivant", 1205, 1002
  item "Ateindre...", 1206, 1002
  item break, 1207, 1002
  item "Insérer l'heure", 1208, 1002

  menu "&Affichage", 1003
  item "Afficher/cacher ouleurs", 1301, 1003
  item break, 1302, 1003

  menu "Fins de ligne", 1303, 1003
  item "CR", 2301, 1303
  item "LF", 2302, 1303
  item "CRLF", 2303, 1303
  item break, 2304, 1303
  item "Afficher/cacher", 2305, 1303

  item "Afficher/cacher guide d'indentation", 1304, 1003
  item "Afficher/cacher ligne verticale", 1305, 1003
  item "Afficher/cacher espaces", 1306, 1003

  menu "&?", 1004
  item "A propos...", 1401, 1004
}

;Gestion d'événement "normaux"
on *:dialog:test_Scintilla3:*:*:{
  if ($devent == init) {
    b SciCreate $dialog($dname).hwnd > 1 > callback3 > clientedge staticedge
    b SciSetPos -s 300 180
    b SciSetMarge -l 35
    b SciSetMarge -f 20 $rgb(100,100,100)
    b SciSetSelStyle $rgb(230,230,230) fill
    b SciSetLineCursor $rgb(255,255,200)
    b SciSetVerticalLine 75 $rgb(200,200,200)
    set %lvert 1
    b SciSetHL -bu $rgb(255,0,0) $rgb(255,255,200)
    b SciSetZoom 1
    b SciSetIndentGuide -s 2 $rgb(255,0,0) $rgb(255,255,255) lookforward
    set %gindent 1
    b SciSetWord_mIRC 1
    b SciSetColor default $rgb(0,0,0) $rgb(255,255,255) 0 0 0
    b SciSetColor comment $rgb(130,140,230) $rgb(255,255,255) 0 0 0
    b SciSetColor regex $rgb(160,30,160) $rgb(255,255,255) 0 0 0
    b SciSetColor group $rgb(0,180,0) $rgb(255,255,255) 0 0 0
    b SciSetColor operator $rgb(255,0,0) $rgb(255,255,255) 0 0 0
    b SciSetColor number $rgb(245,70,245) $rgb(255,255,255) 0 0 0
    b SciSetColor word $rgb(160,30,160) $rgb(255,255,255) 0 1 0
    b SciSetColor word2 $rgb(0,0,160) $rgb(255,255,255) 1 0 0
    b SciSetColor quote $rgb(0,0,255) $rgb(255,255,255) 0 0 0
    set %color 0
    b SciShowColor 1
    ;Texte
    b SciSetText alias pouet $chr(123)
    b SciAddLine if (%a) $chr(123)
    b SciAddLine echo -a La variable existe
    b SciAddLine write fichier.txt Valeur : $+(%,a)
    b SciAddLine $chr(125)
    b SciAddLine else exit
    b SciAddLine $chr(125)
    ;Auto-indentation
    b SciAutoIndent
    ;Caractères de fin de ligne
    b SciSetEOL crlf
    set %ws 1
  }
  elseif ($devent == menu) {
    if ($did == 1401) var %a = $?!"Scintilla_mIRC.dll - WINKEL Vincent"
    ;On vérifie qu'on peut effectuer un UNDO puis on le fait si on peut
    else if (($did == 1201) && ($b(SciCanUndo))) .b SciUndo
    ;On vérifie qu'on peut effectuer un REDO puis on le fait si on peut
    elseif (($did == 1202) && ($b(SciCanRedo))) .b SciRedo
    ;Selection de tout le texte
    elseif ($did == 1209) .b SciSelectAll
    ;Suppression de tout le texte
    elseif ($did == 1210) { if ($?!"Etes-vous sûr(e) de vouloir tout supprimer ?") .b SciClearAll }
    ;Rechercher...
    if ($did == 1204) {
      ;Récupération du texte à chercher
      set %find_text $?"Saisissez le texte à rechercher:"
      ;Demande de recherche
      .b SciFindText -ai %find_text
    }
    ;Rechercher le suivant
    if ($did == 1205) .b SciFindText -i %find_text
    ;Atteindre la ligne...
    if ($did == 1206) { var %line = $?"Ligne ?" | if (%line isnum) .b SciGoToLine %line }
    ;Insérer l'heure
    if ($did == 1208) .b SciReplaceSel $time
    ;Affichage des couleurs
    if ($did == 1301) { .b SciShowColor %color | set %color $iif(%color == 1,0,1) }
    ;Caractères de fin de lignes
    if ($did == 2301) .b SciSetEOL cr
    if ($did == 2302) .b SciSetEOL lf
    if ($did == 2303) .b SciSetEOL crlf
    if ($did == 2305) .b SciSetShowEOL $iif($b(SciGetShowEOL,.),0,1)
    ;Guide d'indentation
    if ($did == 1304) { .b SciSetIndentGuide $iif(%gindent == 1,-h,-s 2 $rgb(255,0,0) $rgb(255,255,255) lookboth) | set %gindent $iif(%gindent == 1,0,1) }
    ;Ligne verticale
    if ($did == 1305) { .b SciSetVerticalLine $iif(%lvert == 1,-1 $rgb(255,255,255),75 $rgb(200,200,200)) | set %lvert $iif(%lvert == 1,0,1) }
    ;Espaces
    if ($did == 1306) { .b SciSetShowWS %ws | set %ws $iif(%ws == 1,0,1) }
  }
  elseif ($devent == close) {
    ;Déchargement de la DLL lors de la fermeture de la dialogbox
    .timerSc 1 1 unload_Scintilla
  }
}

;Alias callback envoyée à la DLL pour gérer les événement du composant
alias callback3 {
  echo 3 -a $1-
  ;Détection d'un clic sur la marge de folding
  if ($2 == MarginClick) b SciToggle $3
}
;End of file

 Conclusion

J'attends toute remarque.

Pour tester les exemples, tapez /test_1 pour le niveau débutant, /test_2 pour le niveau intermédiaire et /test_3 pour le niveau initié.

Le code-source de la DLL (codée en C/C++) en également disponible dans le zip.
Pour faire fonctionner cette DLL, vous n'avez besoin que de Scintilla_mIRC.dll et SciLexer.dll qui doivent impérativement être dans le même dossier. Le reste des fichiers inclus n'est que la doc ou les fichiers sources de la dll.

Bon scripting.

 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

23 février 2009 21:55:26 :
Anciennement compilée en debug, la dll a été recompilée en release. Elle devrait maintenant fonctionner sous toutes les machines.

 Sources du même auteur

Source avec Zip Source avec une capture [DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: J...
PHOTOS EN PV - DISCUT.NET

 Sources de la même categorie

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] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: J... par uaip
Source avec Zip Source avec une capture WORLDDMT - GESTION DE CAISSE V 1.0 par WorldDMT

 Sources en rapport avec celle ci

Source avec une capture VOLUME CONTROLE ( WAVE + MASTER ) par Christophe_B

Commentaires et avis

Commentaire de uaip le 16/02/2009 11:45:58

Ah, j'ai oublié de préciser une chose importante :
étant donné que ce contrôle est spécialisé pour les éditeurs de texte, il inclut également une commande d'indentation automatique, tout comme l'éditeur de scripts mIRC.

Il y a une petite erreur dans le test de niveau débutant, le contrôle est bien créé avec le style "staticedge" et non "clientedg" comme le dit le commentaire.

J'en profite aussi pour dire que la future amélioration sera sans doute un hook direct sur la fenêtre d'édition de scripts mIRC.

Commentaire de uaip le 16/02/2009 23:06:02

Bonsoir,
Jusqu'à maintenant, j'avais testé cette dll sur mIRC v6.17, ce qui fonctionnait (presque) parfaitement. Je viens de passer à la 6.3+, tout a changé, je parle notamment des commandes pour charger/décharger les dlls.
Au lieu de recoder une nouvelle version, je préfère passer directement à l'amélioration : le hook de l'éditeur de scripts mIRC, histoire de reprendre et améliorer medit.dll.

A bon entendeur.

Commentaire de WorldDMT le 19/02/2009 12:46:27

Salut Uaip

il parret que le $scriptdir ne marche pas avec cette dll et c'est ce qu'il fait an grand trouble au versions 6.3+

chez moi ça marche pas :s

* $dll: unable to open 'C:\Users\WorldDMT\Desktop\x\Scintilla_mIRC.dll' (line 8, exemples_Scintilla_mIRC.mrc)

Commentaire de uaip le 21/02/2009 17:44:50

Salut,
Cette DLL est un fichier comme un autre. Son chemin doit donc être spécifié comme un autre.
Mais comme précisé plus haut, j'ai fait l'erreur de tester sur une v6.17, et les appels de DLL entre v6.17 et v6.3+ changent un peu. Au lieu de m'embêter à tout recoder pour finalement offrir un contrôle qui ne servira pas à grand chose, je préfère directement passer à ce que je voulais faire (et surtout ce que wims voulait que je fasse ^^) : un hook sur l'éditeur de scripts, comme medit.dll.

J'ai quand même laissé cette source ici histoire de pas avoir fait ce boulot pour rien.

Commentaire de WorldDMT le 21/02/2009 20:39:06

ok :) mais bon une fois que tu modifie ton code ajoute un commentaire pour qu'on revienne ;)

@+

Commentaire de uaip le 23/02/2009 21:57:39

Désolé pour les désagréments, j'avais compilé en debug au lieu de release, elle ne marchait donc que sur mon PC (et autres machines ayant l'environnement Visual installé).
Aucun problème de compatibilité apparament avec les versions v6.3+.
Veuillez laisser les dlls dans le même répertoire que le fichier d'exemples pour que ceux-ci fonctionnent.

:)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

RichEdit [ par jujuquatre ] ~~~~~~~~~~~QuQuQuatrEuH~~~~~~~~~~~Salut j'ai fait un edit en couleur avec richedit sur ctl_gen.mdxet je voulais demander si il est possible de faire u Problème avec le contrôle "list" dans une dialog [ par Squallou ] Bonjour tout le monde =)je d&#233;bute en scripting et en faisant ma fen&#234;tre d'autojoin j'ai un petit probl&#232;me :j'arrive &#224; ajouter le c A propos du RichEdit :x [ par Squallou ] Coucou tout le monde.J'ai transform&#233; un controle Edit en RichEdit avec la mdx mais j'ai trouv&#233; nul part de documentation sur ce fameux contr Comment effacer tout le texte d'un RichEdit :x [ par Squallou ] Bonjour.Je me sers du controle RichEdit (incomplet et non document&#233; je sais v_v) pour faire un aper&#231;u de mes couleurs d'&#233;criture. Le pb


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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 : 0,796 sec (4)

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