[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
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 !
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
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
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:
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;
}
Citer : Posté le 05/05/2012 22:33 | #
Veb, balise spoiler ou fichier inclus pour le code, s'il te plaît.
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 : +, -, *, /, %, ^, #, ==, ~=, <=, >=, <, >, =, (, ), {, }, [, ], ;, :, ,, ., .., ...
Citer : Posté le 16/05/2012 14:41 | #
Manuel Lua, liste des mots clés dans la partie 2.1
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
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)
Citer : Posté le 31/07/2014 12:37 | #
Tu codes avec Qt?
Citer : Posté le 31/07/2014 12:40 | #
Tu as tout perdu
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
Tableau de variations
Equations Diophantiennes
Conversion d'un nombre décimal en fraction
Citer : Posté le 31/07/2014 12:56 | #
Mais comment faites-vous donc ?
Déjà que Dark Storm est pas mal dans ce domaine... vous faite un concours ou quoi ? x)
Tu codes avec Qt?
Citer : Posté le 31/07/2014 13:01 | #
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
Tu codes avec Qt?
Non en Visual Basic
Oh, du VB Je savais pas qu'on s'en servait encore en-dehors de l'info industrielle
Citer : Posté le 31/07/2014 13:04 | #
Ok, donc tu ne les as pas vraiment perdues
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 !
Citer : Posté le 31/07/2014 14:38 | #
quand même, la coloration syntaxique est bien plus facile en C++. Parce que
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
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.
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