Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [LuaFX] SDK
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

[LuaFX] SDK

Posté le 01/05/2012 15:53



Description du projet :
Cliquez pour découvrir
Cliquez pour recouvrir
LuaHelper est une sorte de SDK pour LuAFX.
Mon programme permet d'ouvrir un programme (en .txt ou .lua), de l'enregistrer sous le nom désiré (en .txt ou .lua) et d'imprimer le programme, le tout étant contenu dans une textbox avec COLORATEUR SYNTAXIQUE 8) .
Il permet également de compiler le fichier .lua de votre choix en .lc à envoyer dans la calculatrice. Vous avez le choix d'ajouter ou non le debug dans le .lc
Enfin, j'ai ajouté un interpreteur lua, qui ne fonctionne actuellement qu'avec le mode console (Ctrl + T pour tester le prog en cours)
Enfin, j'ai ajouté une fonction pour rechercher/remplacer une chaine dans le programme ouvert (Ctrl + F)

Quelques captures d'écran :
Cliquez pour découvrir
Cliquez pour recouvrir

Options supplémentaires à venir :
Cliquez pour découvrir
Cliquez pour recouvrir
Colorateur syntaxique pour les strings
Faire un bon Sprite Maker
Mode d'emploi plus complet
Récupérer les informations du débug dans une fenêtre supplémentaire, lors de la compilation)

Détails techniques :
Cliquez pour découvrir
Cliquez pour recouvrir
Version actuelle : Beta 2.0
Taille du programme : 600 Ko
Le fichier joint contient un .rar dans lequel vous trouverez la dernière version de mon programme, le programme lua16.exe (nécessaire à la compilation) le programme lua.exe (nécessaire à l'interpretation) et les manuels

Crédits :
Cliquez pour découvrir
Cliquez pour recouvrir
Merci à Vebveb pour ses sources, lua16.exe et Trans.exe
lua.exe provient d'ici
le code pour la coloration syntaxique vient d'ici

MAJ du 07/06/12 :
Cliquez pour découvrir
Cliquez pour recouvrir
Ajout d'une fonction de recherche

Si vous avez des bugs, propositions, idées, ... n'hésitez pas à commenter



Fichier joint


Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 05/05/2012 19:24 | #


+2 J'approuve totalement pour la coloration syntaxique, il faut que je sois prêt pour le prochain 48h CPC !
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 05/05/2012 19:38 | #


C'est pour quand le prochain 48h CPC ?

Ajouté le 05/05/2012 à 19:41 :
C\'est bon, je viens de voir la date. Normalement ça devrait être pr^t d\'ici là

Ajouté le 05/05/2012 à 19:54 :
J\'ai publié la version avec le Sprite Maker (dans outils>Sprite Maker). Il permet de transformer un image en code lua (seulement avec des points pour l\'instant). Il gère les deux mode de dessin (noir et blanc (nbdraw) et niveau de gris(graydraw)).
Pour les niveau de gris, j\'ai utilisé ces valeurs :
Gris clair = r=g=b=192
Gris moyen = r=g=b=128
Gris foncé = r=g=b=64
Vebveb Hors ligne Membre Points: 797 Défis: 14 Message

Citer : Posté le 05/05/2012 20:38 | #


Si tu veux, tu peut prendre le code source de sprite maker de orwell. Il y a la fonction qui code pour les sprites lua: je te l'inclu:

Code
Le Code

int Coder::makeCodeGX10(Tab &tab, QPoint orig, uchar* &code)
{
    short pxldebut=0;
    int i;
    int largeur = tab.width(), hauteur = tab.height();
    int l = largeur;
        
    if(l%8) l=l-l%8+8;    // si la largeur n'est pas multiple de 8

    int size = 4                                // origine+hauteur+fin du sprite
            + (l/16)*(1+6*hauteur)            // blocs de 16 pixels
            + ((l%16)==8)*(1+3*hauteur);    // bloc de 8 pixel si necessaire

    code = new uchar[size];

    l=largeur;
    code[0]=(uchar)orig.x();
    code[1]=(uchar)orig.y();
    code[2]=(uchar)hauteur;
    code[3]=(uchar)largeur;
    uchar* Code = code+4;

    do
    {
        if (l>8)    // bloc de 16 pixels a traiter si la largeur restante est >8
        {
            if (pxldebut) *(Code++)=16;
            
            for (int h=0;h<hauteur;h++)
            {        
                uchar oa1=0, oa2=0, oa3=0;
            
                for (i=0; i<8;i++)
                {
                    uchar coul = tab[h][pxldebut+i];
                    uchar trame = !((h+i)&1);
                    
                    oa1 <<= 1; oa2 <<= 1; oa3 <<= 1;

                    switch(coul)
                    {
                    case BLANC:          oa1 += 1;                                        break;
                    case TRANS:                                                         break;
                    case GRIS_CLAIR:  oa1 += 1;                        oa3 += 1;       break;
                    case GRIS:          oa1 += trame;  oa2 += trame;  oa3 += !trame;  break;
                    case GRIS_FONCE:  oa1 += trame;  oa2 += 1;      oa3 += trame;   break;
                    case NOIR:                            oa2 += 1;      oa3 += 1;        break;
                    }
                }
            
                uchar ob1=0, ob2=0, ob3=0;

                for (i=0; i<8;i++)
                {
                    uchar coul = ((pxldebut+8+i < largeur) ? tab[h][pxldebut+8+i] : TRANS);
                    uchar trame = !((h+i)&1);
                    
                    ob1 <<= 1; ob2 <<= 1; ob3 <<= 1;

                    switch(coul)
                    {
                    case BLANC:          ob1 += 1;                                        break;
                    case TRANS:                                                         break;
                    case GRIS_CLAIR:  ob1 += 1;                        ob3 += 1;       break;
                    case GRIS:          ob1 += trame;  ob2 += trame;  ob3 += !trame;  break;
                    case GRIS_FONCE:  ob1 += trame;  ob2 += 1;      ob3 += trame;   break;
                    case NOIR:                            ob2 += 1;      ob3 += 1;        break;
                    }
                }

                *(Code++) = ob1;
                *(Code++) = oa1;
                *(Code++) = ob2;
                *(Code++) = oa2;
                *(Code++) = ob3;
                *(Code++) = oa3;
            }    
            
            pxldebut+=16;
            l-=16;
        }
        else     // bloc de 8 pixels a traiter si la largeur restante est <=8
        {
            if (pxldebut) *(Code++) = 8;
            
            for (int h=0;h<hauteur;h++)
            {
                uchar o1=0, o2=0, o3=0;
            
                for (i=0; i<8;i++)
                {
                    uchar coul = ((pxldebut+i < largeur) ? tab[h][pxldebut+i] : TRANS);
                    uchar trame = !((h+i)&1);
                    
                    o1 <<= 1; o2 <<= 1; o3 <<= 1;

                    switch(coul)
                    {
                    case BLANC:          o1 += 1;                                     break;
                    case TRANS:                                                      break;
                    case GRIS_CLAIR:  o1 += 1;                      o3 += 1;       break;
                    case GRIS:          o1 += trame;  o2 += trame;  o3 += !trame;  break;
                    case GRIS_FONCE:  o1 += trame;  o2 += 1;      o3 += trame;   break;
                    case NOIR:                           o2 += 1;      o3 += 1;         break;
                    }
                }
            
                *(Code++) = o2;
                *(Code++) = o3;
                *(Code++) = o1;
            }

            pxldebut+=8;
            l-=8;
        }
    
    } while ( pxldebut < largeur );

    *(Code++) = 0;
    return size;
}

Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 05/05/2012 22:33 | #


Veb, balise spoiler ou fichier inclus pour le code, s'il te plaît.
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 06/05/2012 11:45 | #


Merci. Je vais essayer d'apater ça à mon prog

Ajouté le 15/05/2012 à 18:01 :
Up : Miseà jour :
Ajout d\'un système d\'onglet pour ouvrir plusieurs prog à la suite
Ajout d\'un interpreteur (actuellement uniquement en mode console)
Modification de l\'interface de compilation
Intégration des manuels, disponible à partir du menu \'\'Aide\'\'

Ajouté le 16/05/2012 à 14:14 :
J\'ai réussi à insérer la coloration syntaxique, vous serait-il possible de me donner vos mots-clés pour le LuaFX ?
Pour l\'instant, je me suis contenté de mettre dans les mots clés : if, then, else, end, while, and, or, do, for, function, return, not, break et dans les tokens : +, -, *, /, %, ^, #, ==, ~=, <=, >=, <, >, =, (, ), {, }, [, ], ;, :, ,, ., .., ...
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 16/05/2012 14:41 | #


Manuel Lua, liste des mots clés dans la partie 2.1
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 16/05/2012 14:44 | #


Ok. Merci

Ajouté le 16/05/2012 à 19:46 :
J\'ai mis à jour les fichiers, contenant la version fonctionnant avec le colorateur syntaxique.
J\'ai également ajouté un raccourci clavier vers l\'interpreteur (pour tester le programme en cours (que mode console)) : Ctrl + T
Nh\'ésitez surtout pas à commenter

Ajouté le 07/06/2012 à 15:29 :
Up. J\'ai enlever le sprite maker (apparement pas adapté au LuaFX ) et j\'ai ajouté une fonction de recherche (Ctrl + F ou Édition<Rechercher
Nhésitez tjr pas à commenté, j\'aimerais savoir ce que je peux y ajouter

Ajouté le 31/07/2014 à 12:30 :
Bon, pour changer, j'ai encore perdu mes sources. Je reprends donc ce projet aujourd'hui à partir de rien
Lephenixnoir En ligne Administrateur Points: 24259 Défis: 170 Message

Citer : Posté le 31/07/2014 12:33 | #


Mais comment faites-vous donc ?
Déjà que Dark Storm est pas mal dans ce domaine... vous faite un concours ou quoi ? x)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 31/07/2014 12:37 | #


Tu codes avec Qt?
Scientifix Hors ligne Membre Points: 762 Défis: 30 Message

Citer : Posté le 31/07/2014 12:40 | #


Tu as tout perdu
JE SERAI ABSENT POUR 2 ANS A+

Je suis fan de Mathématiques et de Sciences en général (d'où mon nom ). Consultez mes programmes en rapport avec les Maths
--------------------------------------------------------

Calculatrice : Graph 75
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 31/07/2014 12:56 | #


Lephenixnoir a écrit :
Mais comment faites-vous donc ?
Déjà que Dark Storm est pas mal dans ce domaine... vous faite un concours ou quoi ? x)
En fait, c'est un projet que j'ai laissé tomber car il n'y avait pas grand intérêt de la part de la communauté, et je n'en avait finalement pas grande utilité moi-même, donc en faisait le tri dans mes fichiers j'ai supprimé ça (Rien à voir avec la perte des sources de mon ancien éditeur de Bitmap, là c'est mon ordi qui a planté)

Intelligide a écrit :
Tu codes avec Qt?
Non en Visual Basic. C'est plus que suffisant pour ce que je compte faire

Lephenixnoir En ligne Administrateur Points: 24259 Défis: 170 Message

Citer : Posté le 31/07/2014 13:01 | #


Cartix a écrit :
En fait, c'est un projet que j'ai laissé tomber car il n'y avait pas grand intérêt de la part de la communauté, et je n'en avait finalement pas grande utilité moi-même, donc en faisait le tri dans mes fichiers j'ai supprimé ça [...]

Ok, donc tu ne les as pas vraiment perdues

Cartix a écrit :
Intelligide a écrit :
Tu codes avec Qt?

Non en Visual Basic
[/quote]
Oh, du VB Je savais pas qu'on s'en servait encore en-dehors de l'info industrielle
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 31/07/2014 13:04 | #


Lephenixnoir a écrit :

Ok, donc tu ne les as pas vraiment perdues
Non, mais le résultat est le même (puis perdre ne veut pas forcément dire ne plus savoir où c'est. (Par exemple quand on perd un être proche)

Oh, du VB Je savais pas qu'on s'en servait encore en-dehors de l'info industrielle
Possible, mais moi j'aime bien
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1242 Défis: 54 Message

Citer : Posté le 31/07/2014 14:32 | #


Quand tu "codes" sur / pour Excel, tu t'en sers aussi par exemple ;).

Quoi qu'il en soit, cool que tu reprenne ce projet, c'est une bonne initiative !
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 31/07/2014 14:38 | #


quand même, la coloration syntaxique est bien plus facile en C++. Parce que

Public Class SyntaxRTB

   Inherits System.Windows.Forms.RichTextBox

   Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
      (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer





   Private Declare Function LockWindowUpdate Lib "user32" (ByVal hWnd As Integer) As Integer

   Private _SyntaxHighlight_CaseSensitive As Boolean = False

   Private Words As New DataTable

   'Contains Windows Messages for the SendMessage API call
   Private Enum EditMessages
      LineIndex = 187
      LineFromChar = 201
      GetFirstVisibleLine = 206
      CharFromPos = 215
      PosFromChar = 1062
   End Enum



   Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
      ColorVisibleLines()
   End Sub



   Public Sub ColorRtb()
      Dim FirstVisibleChar As Integer
      Dim i As Integer = 0

      While i < Me.Lines.Length
         FirstVisibleChar = GetCharFromLineIndex(i)
         ColorLineNumber(i, FirstVisibleChar)
         i += 1
      End While
   End Sub



   Public Sub ColorVisibleLines()
      Dim FirstLine As Integer = FirstVisibleLine()
      Dim LastLine As Integer = LastVisibleLine()
      Dim FirstVisibleChar As Integer

      If (FirstLine = 0) And (LastLine = 0) Then
         'If there is no text it will error, so exit the sub
         Exit Sub
      Else
         While FirstLine < LastLine
            FirstVisibleChar = GetCharFromLineIndex(FirstLine)
            ColorLineNumber(FirstLine, FirstVisibleChar)
            FirstLine += 1
         End While
      End If

   End Sub



   Public Sub ColorLineNumber(ByVal LineIndex As Integer, ByVal lStart As Integer)
      Dim i As Integer = 0
      Dim Instance As Integer
      Dim LeadingChar, TrailingChar As String
      Dim SelectionAt As Integer = Me.SelectionStart
      Dim MyRow As DataRow
      Dim Line() As String, MyI As Integer, MyStr As String

      ' Lock the update
      LockWindowUpdate(Me.Handle.ToInt32)

      MyI = lStart

      If CaseSensitive Then
         Line = Split(Me.Lines(LineIndex).ToString, " ")
      Else
         Line = Split(Me.Lines(LineIndex).ToLower, " ")
      End If

      For Each MyStr In Line
         Me.SelectionStart = MyI
         Me.SelectionLength = MyStr.Length

         If Words.Rows.Contains(MyStr) Then
            MyRow = Words.Rows.Find(MyStr)
            If (Not CaseSensitive) Or (CaseSensitive And MyRow("Word") = MyStr) Then
               Me.SelectionColor = Color.FromName(MyRow("Color"))
            End If
         Else
            Me.SelectionColor = Color.Black
         End If

         MyI += MyStr.Length + 1
      Next

      ' Restore the selectionstart
      Me.SelectionStart = SelectionAt
      Me.SelectionLength = 0
      Me.SelectionColor = Color.Black

      ' Unlock the update
      LockWindowUpdate(0)
   End Sub



   Public Function GetCharFromLineIndex(ByVal LineIndex As Integer) As Integer
      Return SendMessage(Me.Handle, EditMessages.LineIndex, LineIndex, 0)
   End Function



   Public Function FirstVisibleLine() As Integer
      Return SendMessage(Me.Handle, EditMessages.GetFirstVisibleLine, 0, 0)
   End Function



   Public Function LastVisibleLine() As Integer
      Dim LastLine As Integer = FirstVisibleLine() + (Me.Height / Me.Font.Height)

      If LastLine > Me.Lines.Length Or LastLine = 0 Then
         LastLine = Me.Lines.Length
      End If

      Return LastLine
   End Function



   Public Sub New()
      Dim MyRow As DataRow
      Dim arrKeyWords() As String, strKW As String

      Me.AcceptsTab = True

      ''Load all the keywords and the colors to make them
      Words.Columns.Add("Word")
      Words.PrimaryKey = New DataColumn() {Words.Columns(0)}
      Words.Columns.Add("Color")

      arrKeyWords = New String() {"select", "insert", "delete", _
         "truncate", "from", "where", "into", "inner", "update", _
         "outer", "on", "is", "declare", "set", "use", "values", "as", _
         "order", "by", "drop", "view", "go", "trigger", "cube", _
         "binary", "varbinary", "image", "char", "varchar", "text", _
         "datetime", "smalldatetime", "decimal", "numeric", "float", _
         "real", "bigint", "int", "smallint", "tinyint", "money", _
         "smallmoney", "bit", "cursor", "timestamp", "uniqueidentifier", _
         "sql_variant", "table", "nchar", "nvarchar", "ntext", "left", _
         "right", "like","and","all","in","null","join","not","or"}

      For Each strKW In arrKeyWords
         MyRow = Words.NewRow()
         MyRow("Word") = strKW
         MyRow("Color") = Color.LightCoral.Name
         Words.Rows.Add(MyRow)
      Next

   End Sub



   Public Property CaseSensitive() As Boolean
      Get
         Return _SyntaxHighlight_CaseSensitive
      End Get
      Set(ByVal Value As Boolean)
         _SyntaxHighlight_CaseSensitive = Value
      End Set
   End Property





End Class  


peut être remplacé par 50 lignes avec une coloration 100% personnalisable avec 16777216 couleurs
Lephenixnoir En ligne Administrateur Points: 24259 Défis: 170 Message

Citer : Posté le 31/07/2014 14:40 | #


@Nemhardy
Pas exactement, lorsque tu codes sous Office c'est du VBA (Visual Basic pour Application), donc c'est un peu différent...
Le Visual Basic est équipé par défaut d'une interface graphique.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 31/07/2014 15:55 | #


Intelligide, finit ton PrizmSDK, on en reparlera après, Ok ?
Crois-moi, l'utilisation de Visual Basic est très simple et permet de faire de bonnes choses facilement

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 43 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd