Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

scrolling sur une form ?

11 réponses
Avatar
free.fr
bonjour
pour suivre l'execution d'un pgme , j'ajoute des instructions
form1.print "trace 1"
mais alors l'écran form1 ne fait pas de scrolling (defilement vers le haut).
y a t'il une prppriété qui permettrait ca ?
(en fait faire une console ... sans le debug.print)
merci de vos idées.

10 réponses

1 2
Avatar
jean-marc
"free.fr" wrote in message
news:47e814ca$0$7816$
bonjour
pour suivre l'execution d'un pgme , j'ajoute des instructions
form1.print "trace 1"
mais alors l'écran form1 ne fait pas de scrolling (defilement vers le
haut). y a t'il une prppriété qui permettrait ca ?
(en fait faire une console ... sans le debug.print)
merci de vos idées.



Hello,

Une solution est décrite dans la FAQ:
http://faq.vb.free.fr/index.php?question0

Pour du simple débuggage, tu peux aussi utiliser
une textbox multiline et faire des écritures en
ajout du genre:

Text1.text = Text1.text & vbcrlf & "COUCOUCOUCOUCOU"
avec un Text1.selStart = len(Text1) pour etre toujours à la fin.

Il y a encore d'autres façons de faire, en fonction de ce que tu
veux. Le plus simple est vraiment la façon recommandée dans la
FAQ.

Un exemple de Picture scrollable dans un programme de mon cru:
http://www.vbfrance.com/codes/PETITE-APPLICATION-CARTOGRAPHIE-AVEC-SCROLLING-CALCULS-DISTANCES-APRES_36322.aspx


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
Bonjour,
free.fr a écrit :
bonjour
pour suivre l'execution d'un pgme , j'ajoute des instructions
form1.print "trace 1"
mais alors l'écran form1 ne fait pas de scrolling (defilement vers le
haut). y a t'il une prppriété qui permettrait ca ?
(en fait faire une console ... sans le debug.print)
merci de vos idées.



Pour utiliser une console à des fins de deboguage, tu peux essayer ceci
, à adapter en fonction de tes besoins :

dans une feuille :

' ==================================================================== Option Explicit

Private Sub Command1_Click()
Dim i As Integer

OpenConsole

printf "Début de trace"
For i = 1 To 10
printf "Message n° : " & i
Next i
printf "Fin de trace"

' Facultatif : Enregistre le buffer de la console dans un fichier
DumpConsole "Trace.log"
End Sub

Private Sub Form_Unload(Cancel As Integer)
CloseConsole
End Sub

Résultat : http://cjoint.com/?dArf5SOWPg


' Cela nécessite toutefois un petit module (un
' peu plus long tout de même...), mais il est réutilisable
' =====================================================================
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Const SW_RESTORE = 9
Private Const SW_SHOW = 5

Private Declare Function ShowWindow Lib "user32" _
(ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Private Declare Function GetForegroundWindow Lib "user32" () As Long

Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hWnd As Long, lpdwProcessId As Long) As Long

Private Declare Function AttachThreadInput Lib "user32" _
(ByVal idAttach As Long, ByVal idAttachTo As Long, _
ByVal fAttach As Long) As Long

Public Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long

Private Declare Function CharToOemBuff Lib "user32" Alias "CharToOemBuffA" _
(ByRef lpszSrc As Any, ByRef lpszDst As Any, _
ByVal cchDstLength As Long) As Long

Private Declare Function OemToCharBuff Lib "user32" Alias "OemToCharBuffA" _
(ByRef lpszSrc As Any, ByRef lpszDst As Any, _
ByVal cchDstLength As Long) As Long

' API Console
' ========== Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As
Long) As Long
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle
As Long) As Long
Private Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _
(ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal _
nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten
As Long, _
lpReserved As Any) As Long

Private Declare Function CreateConsoleScreenBuffer Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal dwShareMode As
Long, _
lpSecurityAttributes As Long, ByVal dwFlags As Long, _
lpScreenBufferData As Any) As Long

Private Declare Function SetConsoleScreenBufferSize Lib "kernel32" _
(ByVal hConsoleOutput As Long, ByVal dwSize As Long) As
Long

Private Declare Function GetConsoleScreenBufferInfo Lib "kernel32" _
(ByVal hConsoleOutput As Long, _
lpConsoleScreenBufferInfo As
CONSOLE_SCREEN_BUFFER_INFO) As Long

Private Declare Function SetConsoleActiveScreenBuffer Lib "kernel32" _
(ByVal hConsoleOutput As Long) As Long

Private Declare Function GetLargestConsoleWindowSize Lib "kernel32" _
(ByVal hConsoleOutput As Long) As COORD

Private Declare Function SetConsoleWindowInfo Lib "kernel32" _
(ByVal hConsoleOutput As Long, ByVal bAbsolute As Long, _
lpConsoleWindow As SMALL_RECT) As Long

Private Declare Function SetConsoleTextAttribute Lib "kernel32" _
(ByVal hConsoleOutput As Long, ByVal wAttributes As
Long) As Long

Private Declare Function FillConsoleOutputAttribute Lib "kernel32" _
(ByVal hConsoleOutput As Long, ByVal wAttribute As Long, _
ByVal nLength As Long, ByVal dwWriteCoord As Long, _
lpNumberOfAttrsWritten As Long) As Long

Private Declare Function WriteConsoleOutputAttribute Lib "kernel32" _
(ByVal hConsoleOutput As Long, lpAttribute As Integer, _
ByVal nLength As Long, ByVal dwWriteCoord As Long, _
lpNumberOfAttrsWritten As Long) As Long

Private Declare Function SetConsoleTitle Lib "kernel32" Alias
"SetConsoleTitleA" _
(ByVal lpConsoleTitle As String) As Long

Private Declare Function GetConsoleCP Lib "kernel32" () As Long
Private Declare Function SetConsoleOutputCP Lib "kernel32" _
(ByVal wCodePageID As Long) As Long

Private Declare Function ReadConsoleOutput Lib "kernel32" Alias _
"ReadConsoleOutputA" (ByVal hConsoleOutput As Long, _
ByRef lpBuffer As Any, ByVal dwBufferSize As Long, _
ByVal dwBufferCoord As Long, lpReadRegion As
SMALL_RECT) As Long

Private Declare Function ReadConsoleOutputCharacter Lib "kernel32" Alias _
"ReadConsoleOutputCharacterA" (ByVal hConsoleOutput As
Long, _
ByVal lpCharacter As String, ByVal nLength As Long, _
ByVal dwReadCoord As Long, lpNumberOfCharsRead As Long)
As Long

Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const CONSOLE_TEXTMODE_BUFFER = 1

Private Type COORD
x As Integer
Y As Integer
End Type

Private Type SMALL_RECT
Left As Integer
Top As Integer
Right As Integer
Bottom As Integer
End Type

Private Const FOREGROUND_BLUE = &H1
Private Const FOREGROUND_GREEN = &H2
Private Const FOREGROUND_RED = &H4
Private Const FOREGROUND_INTENSITY = &H8
Private Const BACKGROUND_BLUE = &H10
Private Const BACKGROUND_GREEN = &H20
Private Const BACKGROUND_RED = &H40
Private Const BACKGROUND_INTENSITY = &H80

Private Type CONSOLE_SCREEN_BUFFER_INFO
dwSize As COORD
dwCursorPosition As COORD
wAttributes As Integer
srWindow As SMALL_RECT
dwMaximumWindowSize As COORD
End Type

Private hConsole As Long

Public Function OpenConsole(Optional bForceForeground As Boolean = True)
As Boolean
Dim hWnd As Long
Dim lResult As Long
Dim csbi As CONSOLE_SCREEN_BUFFER_INFO
Dim coordScreen As COORD, xSize As Integer, ySize As Integer
Dim xy As Long, Attr As Integer, Written As Long
Dim srWindowRect As SMALL_RECT

If AllocConsole() Then
hConsole = CreateConsoleScreenBuffer(GENERIC_WRITE Or _
GENERIC_READ, 0&, 0&, _
CONSOLE_TEXTMODE_BUFFER, 0&)
If hConsole <> 0 Then
' Jaune sur fonds bleu
lResult = SetConsoleTextAttribute(hConsole, _
FOREGROUND_GREEN Or FOREGROUND_RED Or _
FOREGROUND_INTENSITY Or BACKGROUND_BLUE)
SetConsoleActiveScreenBuffer hConsole

lResult = GetConsoleScreenBufferInfo(hConsole, csbi)
If lResult <> 0 Then
' Buffer de 500 lignes de 80 caractères
xSize = 80
ySize = 500

srWindowRect.Left = 0
srWindowRect.Top = 0
srWindowRect.Right = 0
srWindowRect.Bottom = 0
lResult = SetConsoleWindowInfo(hConsole, -1, srWindowRect)

coordScreen.x = xSize
coordScreen.Y = ySize
xy = CLng(coordScreen.Y) * 65536 + coordScreen.x
lResult = SetConsoleScreenBufferSize(hConsole, xy)

' Taille visible
srWindowRect.Right = 79
srWindowRect.Bottom = 24
lResult = SetConsoleWindowInfo(hConsole, -1, srWindowRect)
End If

Attr = FOREGROUND_GREEN Or FOREGROUND_RED Or _
FOREGROUND_INTENSITY Or BACKGROUND_BLUE
xy = 0
lResult = FillConsoleOutputAttribute(hConsole, _
Attr, 2000, xy, Written)
SetConsoleTitle "Console VB6"
hWnd = FindWindow("ConsoleWindowClass", "Console VB6")

If bForceForeground Then ForceForeGroundWindow hWnd
End If
End If
OpenConsole = hConsole <> 0
End Function


' Ecriture dans la console
' ======================= Public Function printf(ByVal str As String)
Dim lResult As Long
Dim cWritten As Long
Dim Data() As Byte, i As Integer

If hConsole <> 0 Then
If Len(Trim(str)) > 0 Then str = Time & "> " & str
ReDim Data(1 To Len(str)) As Byte
For i = 1 To Len(str)
Data(i) = Asc(Mid(str, i, 1))
Next i
CharToOemBuff Data(1), Data(1), Len(str)
For i = 1 To Len(str)
Mid(str, i, 1) = Chr$(Data(i))
Next i
str = str & vbCrLf
lResult = WriteConsole(hConsole, ByVal str, Len(str), cWritten,
ByVal 0&)
End If
End Function


' Fermeture de la console
' ====================== Public Function CloseConsole()
CloseHandle hConsole
FreeConsole
End Function


' Enregistre le buffer de la console
' ================================= Public Function DumpConsole(fName As String)
Dim lResult As Long
Dim csbi As CONSOLE_SCREEN_BUFFER_INFO
Dim BufStart As Long, BUFSIZE As Long
Dim ByteRead As Long
Dim Buf As String, Rec As String
Dim i As Integer
Dim Data() As Byte, j As Integer
Dim fNum As Integer

If hConsole <> 0 Then
lResult = GetConsoleScreenBufferInfo(hConsole, csbi)
BufStart = 0
BUFSIZE = csbi.dwCursorPosition.Y * 80
Buf = String(csbi.dwCursorPosition.Y * 80, vbKeySpace)
lResult = ReadConsoleOutputCharacter(hConsole, ByVal Buf, _
BUFSIZE, BufStart, ByteRead)
If lResult <> 0 And ByteRead >= 80 Then
fNum = FreeFile()
fName = App.Path & "" & fName
Open fName For Append As #fNum
Rec = ""
For i = 1 To ByteRead / 80
Rec = RTrim(Mid(Buf, (i - 1) * 80 + 1, 80))
If Len(Rec) > 0 Then
ReDim Data(1 To Len(Rec)) As Byte
For j = 1 To Len(Rec)
Data(j) = Asc(Mid(Rec, j, 1))
Next j
OemToCharBuff Data(1), Data(1), Len(Rec)
For j = 1 To Len(Rec)
Mid(Rec, j, 1) = Chr$(Data(j))
Next j
End If
Print #fNum, Rec
Next i
Close #fNum
MsgBox "Trace enregistrée dans :" & vbCrLf & fName, _
vbOKOnly Or vbInformation
End If
End If
End Function


' Force la fenêtre en premier plan
' =============================== Public Sub ForceForeGroundWindow(ByVal newHwnd As Long, _
Optional bRestoreIconic As Boolean = False)
Dim ThreadID1 As Long, ThreadID2 As Long
Dim x As Long

' Nouveau comportement de SetForeGroundWindow
' La fenêtre à activer doit appartenir au Thread appelant
If newHwnd = GetForegroundWindow() Then
Exit Sub
Else
ThreadID1 = GetWindowThreadProcessId(GetForegroundWindow(), 0)
ThreadID2 = GetWindowThreadProcessId(newHwnd, 0)
If ThreadID1 <> ThreadID2 Then
x = AttachThreadInput(ThreadID1, ThreadID2, True)
x = SetForegroundWindow(newHwnd)
x = AttachThreadInput(ThreadID1, ThreadID2, True)
Else
x = SetForegroundWindow(newHwnd)
End If
If IsIconic(newHwnd) And bRestoreIconic = True Then
x = ShowWindow(newHwnd, SW_RESTORE)
Else
x = ShowWindow(newHwnd, SW_SHOW)
End If
End If

End Sub


--
Cordialement,

Jacques.
Avatar
Jacques93
Jacques93 a écrit :
[...]
Mais il aurait pu donner un lien sur les fonctions associées aux consoles :

<http://msdn2.microsoft.com/en-us/library/ms682073(VS.85).aspx>


--
Cordialement,

Jacques.
Avatar
jean-marc
"Jacques93" wrote in message
news:
Jacques93 a écrit :
[...]
Mais il aurait pu donner un lien sur les fonctions associées aux consoles
:

<http://msdn2.microsoft.com/en-us/library/ms682073(VS.85).aspx>



Hello Jacques,

Le hasard fait parfois bien les choses ...
J'ai du ce matin écrire une petite appli pour un client,
appli pour laquelle il me fallait un programme VB sans
forme mais avec une console ...

Un simple copy/paste de ton exemple précédent m'a évité
2 ou 3 heures de recherche! Et bien sur, tout a fonctionné
à merveille du premier coup :-)

J'ai juste enlevé les msgbox et adapté le layout de la
sortie de printf et hop, le tour était joué !

Et donc, Merci pour cet exemple simple et fonctionnel !

Bonne journée !

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
Bonjour jean-marc,
jean-marc a écrit :
"Jacques93" wrote in message
news:

Hello Jacques,

Le hasard fait parfois bien les choses ...
J'ai du ce matin écrire une petite appli pour un client,
appli pour laquelle il me fallait un programme VB sans
forme mais avec une console ...

Un simple copy/paste de ton exemple précédent m'a évité
2 ou 3 heures de recherche! Et bien sur, tout a fonctionné
à merveille du premier coup :-)



:-) , utilisé en clientèle depuis 2002/2003 à des fins de trace, la
console n'étant ouverte que si on lance le programme avec une option (/D
ou /T). Le temps perdu par les appels 'printf' étant négligeable (si
l'on ne la place pas dans une boucle infernale).
C'est un moyen assez pratique de récupérer des logs (on peut automatiser
l'envoi de ces fichiers par mail à fin d'analyse)

Il faut juste éviter de fermer la fenêtre de la console, il n'y a pas de
conséquence grave, mais un message d'erreur.

J'ai juste enlevé les msgbox et adapté le layout de la
sortie de printf et hop, le tour était joué !



J'avais envisagé d'implémenter, en partie, les fonctionnalités de
formattage de la fonction printf de C, cela ne s'est pas révélé
indispensable mais le nom est resté ...

Et donc, Merci pour cet exemple simple et fonctionnel !

Bonne journée !




De même :-)

--
Cordialement,

Jacques.
Avatar
jean-marc
"Jacques93" wrote in message
news:um2%

J'avais envisagé d'implémenter, en partie, les fonctionnalités de
formattage de la fonction printf de C, cela ne s'est pas révélé
indispensable mais le nom est resté ...



Ce n'était pas indispensable pour moi non plus, mais ça me
simplifiait la vie. Le nom m'ayant inspiré,j'ai complété ton
printf en implémentant le minimum de printf de C.

Ca reste 100% compatible avec ton printf.


' Ecriture dans la console
' ======================= Public Function printf(ByVal str As String, ParamArray arguments() As
Variant)
Dim lResult As Long
Dim cWritten As Long
Dim Data() As Byte, i As Integer
Dim output As String

Dim state As FrmtStates
Dim prm As Long
Dim prmValue As Variant
Dim letter As String

If hConsole <> 0 Then

state = WaitRegular
For i = 1 To Len(str)
letter = Mid$(str, i, 1)
Select Case state

Case WaitRegular
If letter = "%" Then
state = WaitType
ElseIf letter = "" Then
state = WaitEscChar
Else
output = output & letter
End If

Case WaitType ' Support c, d, f, s
If letter = "c" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
If (Val(prmValue) > 0) Then
output = output & Chr$(Val(prmValue) Mod 256)
Else
output = output & Left$(prmValue, 1)
End If
prm = prm + 1
End If
ElseIf letter = "d" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
output = output & CLng(prmValue)
End If
prm = prm + 1
ElseIf letter = "f" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
output = output & CDbl(prmValue)
End If
prm = prm + 1
ElseIf letter = "s" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
output = output & CStr(prmValue)
End If
prm = prm + 1
Else
output = output & letter
End If
state = WaitRegular

Case WaitEscChar ' Support n, t and
If letter = "n" Then
output = output & vbCrLf
ElseIf letter = "t" Then
output = output & vbTab
ElseIf letter = "" Then
output = output & ""
End If
state = WaitRegular
End Select
Next i

str = output

If Len(Trim(str)) > 0 Then str = Date & " " & Time & " - " & str
ReDim Data(1 To Len(str)) As Byte
For i = 1 To Len(str)
Data(i) = Asc(Mid(str, i, 1))
Next i
CharToOemBuff Data(1), Data(1), Len(str)
For i = 1 To Len(str)
Mid(str, i, 1) = Chr$(Data(i))
Next i
If UBound(arguments()) = -1 Then ' Compatibilité avec ancienne
version
str = str & vbCrLf
End If
lResult = WriteConsole(hConsole, ByVal str, Len(str), cWritten, ByVal
0&)
End If
End Function

'****

Maintenant on peut toujours écrire:

printf "Hello World"

Mais on peut aussi faire ça:

' ---------------------------------------------------
Dim i As Integer
Dim sometext As String

sometext = "WORLD"

OpenConsole
For i = 1 To 10
printf "(%c) Hello %st%dn", 64 + i, sometext, i
Sleep 10
Next i
DumpConsole "Trace.log"

CloseConsole
' ---------------------------------------------------

Qui produit:

1/04/2008 15:47:00 - (A) Hello WORLD 1
1/04/2008 15:47:00 - (B) Hello WORLD 2
1/04/2008 15:47:00 - (C) Hello WORLD 3
1/04/2008 15:47:00 - (D) Hello WORLD 4
1/04/2008 15:47:00 - (E) Hello WORLD 5
1/04/2008 15:47:00 - (F) Hello WORLD 6
1/04/2008 15:47:00 - (G) Hello WORLD 7
1/04/2008 15:47:00 - (H) Hello WORLD 8
1/04/2008 15:47:00 - (I) Hello WORLD 9
1/04/2008 15:47:00 - (J) Hello WORLD 10


A faire maintenant: compléter l'implémentation de printf
pour traiter en plus les parties optionelles avant type:
[flags][width][.precision][{suffix}]

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
jean-marc a écrit :
"Jacques93" wrote in message
news:um2%

J'avais envisagé d'implémenter, en partie, les fonctionnalités de
formattage de la fonction printf de C, cela ne s'est pas révélé
indispensable mais le nom est resté ...



Ce n'était pas indispensable pour moi non plus, mais ça me
simplifiait la vie. Le nom m'ayant inspiré,j'ai complété ton
printf en implémentant le minimum de printf de C.

Ca reste 100% compatible avec ton printf.


' Ecriture dans la console
' ======================= > Public Function printf(ByVal str As String, ParamArray arguments() As
Variant)
Dim lResult As Long
Dim cWritten As Long
Dim Data() As Byte, i As Integer
Dim output As String

Dim state As FrmtStates
Dim prm As Long
Dim prmValue As Variant
Dim letter As String

If hConsole <> 0 Then

state = WaitRegular
For i = 1 To Len(str)
letter = Mid$(str, i, 1)
Select Case state

Case WaitRegular
If letter = "%" Then
state = WaitType
ElseIf letter = "" Then
state = WaitEscChar
Else
output = output & letter
End If

Case WaitType ' Support c, d, f, s
If letter = "c" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
If (Val(prmValue) > 0) Then
output = output & Chr$(Val(prmValue) Mod 256)
Else
output = output & Left$(prmValue, 1)
End If
prm = prm + 1
End If
ElseIf letter = "d" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
output = output & CLng(prmValue)
End If
prm = prm + 1
ElseIf letter = "f" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
output = output & CDbl(prmValue)
End If
prm = prm + 1
ElseIf letter = "s" Then
If prm <= UBound(arguments()) Then
prmValue = arguments(prm)
output = output & CStr(prmValue)
End If
prm = prm + 1
Else
output = output & letter
End If
state = WaitRegular

Case WaitEscChar ' Support n, t and
If letter = "n" Then
output = output & vbCrLf
ElseIf letter = "t" Then
output = output & vbTab
ElseIf letter = "" Then
output = output & ""
End If
state = WaitRegular
End Select
Next i

str = output

If Len(Trim(str)) > 0 Then str = Date & " " & Time & " - " & str
ReDim Data(1 To Len(str)) As Byte
For i = 1 To Len(str)
Data(i) = Asc(Mid(str, i, 1))
Next i
CharToOemBuff Data(1), Data(1), Len(str)
For i = 1 To Len(str)
Mid(str, i, 1) = Chr$(Data(i))
Next i
If UBound(arguments()) = -1 Then ' Compatibilité avec ancienne
version
str = str & vbCrLf
End If
lResult = WriteConsole(hConsole, ByVal str, Len(str), cWritten, ByVal
0&)
End If
End Function

'****

Maintenant on peut toujours écrire:

printf "Hello World"

Mais on peut aussi faire ça:

' ---------------------------------------------------
Dim i As Integer
Dim sometext As String

sometext = "WORLD"

OpenConsole
For i = 1 To 10
printf "(%c) Hello %st%dn", 64 + i, sometext, i
Sleep 10
Next i
DumpConsole "Trace.log"

CloseConsole
' ---------------------------------------------------

Qui produit:

1/04/2008 15:47:00 - (A) Hello WORLD 1
1/04/2008 15:47:00 - (B) Hello WORLD 2
1/04/2008 15:47:00 - (C) Hello WORLD 3
1/04/2008 15:47:00 - (D) Hello WORLD 4
1/04/2008 15:47:00 - (E) Hello WORLD 5
1/04/2008 15:47:00 - (F) Hello WORLD 6
1/04/2008 15:47:00 - (G) Hello WORLD 7
1/04/2008 15:47:00 - (H) Hello WORLD 8
1/04/2008 15:47:00 - (I) Hello WORLD 9
1/04/2008 15:47:00 - (J) Hello WORLD 10


A faire maintenant: compléter l'implémentation de printf
pour traiter en plus les parties optionelles avant type:
[flags][width][.precision][{suffix}]




Joli :-)

Pour ce qui voudrait aller plus loin (je n'ai pas le courage), un autre
exemple d'implémentation (non testé), qui semble assez complet au niveau
des options, basé sur sprintf / fprintf :

<http://www.freevbcode.com/ShowCode.asp?IDE23>

et la liste exhaustive ? (je crois que cela dépend des versions de C /
C++ ) des options à implémenter :

<http://msdn2.microsoft.com/en-us/library/ybk95axf(VS.71).aspx>

<http://msdn2.microsoft.com/en-us/library/56e442dc(VS.71).aspx>

--
Cordialement,

Jacques.
Avatar
Jean-marc
Jacques93 wrote:
jean-marc a écrit :



A faire maintenant: compléter l'implémentation de printf
pour traiter en plus les parties optionelles avant type:
[flags][width][.precision][{suffix}]




Joli :-)

Pour ce qui voudrait aller plus loin (je n'ai pas le courage), un
autre exemple d'implémentation (non testé), qui semble assez complet
au niveau des options, basé sur sprintf / fprintf :

<http://www.freevbcode.com/ShowCode.asp?IDE23>



Ca à l'air pas mal, à regarder :-)

et la liste exhaustive ? (je crois que cela dépend des versions de C /
C++ ) des options à implémenter :



Pour le C, il n'y a pas de questions : les options et le comportement à
implémenter est parfaitement documentée de façon exhaustive dans la norme
ANSI du langage C. Pour le C++, je ne sais pas. A priori, la fonction doit
avoir un comportement très similaire.
Je sais aussi que C99 a introduit des facilités et de nouvelles options,
mais c'est très peu employé car on trouve peu de compilos C99 compliant.

En tout cas, c'est sympa en VB d'écrire:

Dim i As Long
Dim szName As String

szName = "Jacques"

For i = 1 To 10
Call printf("Bonne soirée %d fois, %s!n", i, szName)
Next i

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jean-marc
>Jean-marc wrote:



(... des horreurs orthographiques ...)

Mes excuses pour les fautes d'orthographe de mon post précédent,
j'ai écrit en faisant autre chose en même temps (mauvaise idée).

--
Jean-marc
Avatar
Jacques93
Jacques93 a écrit :

Autant de fautes en moins de lignes ? L'heure perdue ce week-end, pas
encore récupérée ? :-D

Pour ce qui voudrait aller plus loin (je n'ai pas le courage), un autre



--
Cordialement,

Jacques.
1 2