Défilement du texte

MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007 - 5 août 2006 à 14:54
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 7 août 2006 à 00:19
Bonjour !
(hé oui c'est encore moi !)

Je voudrai faire un défilement de texte de haut en bas en C++ Win32 mais le problème c'est que j'arrive pas a trouver de source.

24 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
5 août 2006 à 16:46
void ScrollRight(char *sz, char *szOut)
{
       char first = sz[0];
     char *d = szOut;
    
     sz++;
     while(*sz)
      {
            *d++ = *sz;
            sz++;
     }
           
     *d++ = first;
     *d = 0;
}

int main()
{
      char str[] = "Coucou C'est moi ";
      char buff[255];
      int iLen, i=0;
      
      iLen = strlen(str);
      
      while(i<5*iLen)
      {
        system("cls");
          ScrollRight(str, buff);
         printf("%s\n", buff);
         strcpy(str, buff);
         i++;
         Sleep(100);
    }
      
      
    system("pause");
    return 0;
}
ULARGE_INTEGERJokyQi=QI("Joky"
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
5 août 2006 à 16:49
Merde pourquoi j'ai fait de droite à gauche ?
Désolé
Sinon, ben Timer, déplacement de Controle....

ULARGE_INTEGERJokyQi=QI("Joky"
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
5 août 2006 à 18:12
Est-ce que c'est possible de faire un deplacement de texte en utilisant DrawText ??
ou TextOut ??? Au lieu de faire un deplacement de controle.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 août 2006 à 19:21
Pas besoin de se creuser la tête pour voir que c'est possible (et simple) avec DrawText. Il suffit d'effacer l'ancienne position, décaler la position puis redessiner. Le tout avec un timer ce sera mieux

_____________________________________
Un éditeur de ressources gratuit pour Windows
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
5 août 2006 à 19:37
!!! J'avous que j'ai pas tout pigé ... Tu veut que je mette DrawText dans

case WM_TIMER  ? C'est ça ?? ou Tu veut que je le mette dans :

case WM_TIMER:
    switch(wParam)
        {
            case IDT_TIMER1:
             DrawText.....
             return 0;
          }
       ....
Puis comment on efface la position ??? La chui vraiment Paumé !
Désolé d'être aussi Noob mais DrawText jle connais vite fait
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 août 2006 à 19:42
UINT uTextPosition = POSITION_INITIALE;
..
case WM_TIMER:
  uTextPosition += delta;
  if(uTextPosition > MAX) uTextPosition = POSITION_INITIALE;
  InvalidateRect(hWnd, &zoneContenantLeTexte, 1);
  break;

et dans le WM_PAINT, tu dessines à la position uTextPosition

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
5 août 2006 à 19:57
Mais ... Mais Non d'une PIPE ! Zut Flut Parachute ! Sa ne marche pas !!
voilà mon code :

case WM_TIMER:
        uTextPosition += 1;
        if(uTextPosition > 200) uTextPosition = 10;
        InvalidateRect(hWindow, &rect, 1);
        return 0;

    case WM_PAINT:
        hDC = BeginPaint(hWindow, &ps);
        GetClientRect(hWindow, &rect);
        rect.left = 10;
        rect.top = uTextPosition;

        DrawText(hDC, "tt", 2, &rect, DT_VCENTER);

        EndPaint(hWindow, &ps);
        return 0;
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 août 2006 à 20:11
SetRect(&rect, 10, uTextPosition, 10 + largeurTexte, uTextPosition + hauteurTexte);
au lieu de
rect.left = 10;

rect.top = uTextPosition;

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
5 août 2006 à 20:29
Putain mais ma parole il veut pas bouger !!!
( Tu sais defois j'aimerai trop prendre mon PC est le jeté par la fenêtre et prendre l'écran et le jeté par terre puis l'écrasé le frapper le bruler faire des teste nucléaire )
Désolé mais sa marche toutjours pas
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 août 2006 à 20:34
T'inquiète pas ca vient jamais du PC ces choses la...
Vérifie que tes variables sont pas définies localement, ou alors en statique (c'est mieux pour conserver les valeurs)

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
5 août 2006 à 20:44
Putain ! Qu'est ce que je fait maintenant ?
  [1] - Jme tire une balle;
  [2] - Jme tire une balle;
  [3] - Jme tire une balle;
  [4] - Jme tire une balle;
  [5] - Jme tire une balle;
Le pire c'est que je suis sûre que c'est une erreur bidon un truk trop con et comme d'hab ce genre d'erreur je les trouves jamais !

Bon je vais tout recommencer de 0 à F puis je re !
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
5 août 2006 à 21:30
Re ! Ben sa a rien changer ! Que dalle ! rien de chez rien ! yelou !
J'arrive pas a trouver le problème
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
6 août 2006 à 16:35
#include <windows.h>

const char TxtToScroll[] = "Le Texte à Scroller";
UINT uiY,LIMITEP, LIMITEM;
RECT txtArea;
SIZE szTxt;
HDC hDc;
BOOL Down;

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;

    switch(Msg)
    {
    case WM_CREATE:
        LIMITEM = 10;
        uiY = LIMITEM;
        LIMITEP = 100;
        Down = TRUE;
        SetTimer(hWnd, 1, 1, NULL);
        return 0;

    case WM_PAINT:
        hDc = BeginPaint(hWnd, &ps);
        SetBkMode(hDc, TRANSPARENT);
        TextOut(hDc, 10, uiY, TxtToScroll, 19);
        EndPaint(hWnd, &ps);
        return 0;

    case WM_TIMER:
        if(Down) uiY++;       
        else uiY--;
       
        if(Down)
        {
            if (uiY==LIMITEP)
            {
                Down = FALSE;
                LIMITEP -= 1;
            }
        }
        else
        {
            if (uiY==LIMITEM)
            {
                Down = TRUE;
                LIMITEM += 1;
            }
        }

        if(LIMITEM>=LIMITEP)
            KillTimer(hWnd, 1);
   
        GetTextExtentPoint(hDc, TxtToScroll, strlen(TxtToScroll), &szTxt);
        SetRect(&txtArea, 10, uiY-1, 10+szTxt.cx, uiY-1+szTxt.cy);
        InvalidateRect(hWnd, 0, 1);
        return 0;

    case WM_DESTROY:
        if(LIMITEM>=LIMITEP)
            KillTimer(hWnd, 1);
        ExitProcess(0);
        return 0;
    }
    return DefWindowProc(hWnd, Msg, wParam, lParam);
}

int __stdcall WinMain(HINSTANCE hInst, HINSTANCE x, PSTR y, int z)
{
    WNDCLASS wcl;
    HWND hWnd;
    MSG Msg;

    memset(&wcl, 0, sizeof(WNDCLASS));
    wcl.hbrBackground = CreateSolidBrush(RGB(255,255,255));
    wcl.hCursor          = LoadCursor(NULL, (LPCSTR)IDC_ARROW);
    wcl.hIcon          = LoadIcon(NULL, (LPCSTR)IDI_APPLICATION);
    wcl.hInstance      = hInst;
    wcl.lpfnWndProc      = WndProc;
    wcl.lpszClassName = "WndClass";

    if(!RegisterClass(&wcl))    return 0;

    hWnd = CreateWindow( "WndClass", "Défilement de texte", WS_SYSMENU,
                         50,50,500,400,
                         HWND_DESKTOP, NULL, hInst, NULL);

    ShowWindow(hWnd, SW_SHOWNORMAL);

    while(GetMessage(&Msg, NULL, 0, 0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }             

    return 0;
}

ULARGE_INTEGERJokyQi=QI("Joky"
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
6 août 2006 à 18:28
Salut,

Dans ton prog, les 2 lignes avec GetTextExtentPoint() et SetRect() ne servent a rien

Et pour faire plus joli, je remplacerai l'appel InvalidateRect() par:

ScrollWindowEx(hWnd, 0, Down ? (+1):(-1), NULL, NULL, NULL, NULL, SW_INVALIDATE);
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 août 2006 à 18:37
Je pense que txtArea était destiné à être utilisé dans le InvalidateRect

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
6 août 2006 à 18:41
J'avais oublié de vous dire que j'avais trouver le problème
J'ai juste mit un timer :

case WM_TIMER:
        switch(wParam)
        {
        case IDT_TIMER1:
        uTextPosition += 1;
        if(uTextPosition > 200) uTextPosition = 10;
        InvalidateRect(hWindow, NULL, true);
        return 0;
        }
        return  0;

Et puis aussi ! C'est normale que InvalidateRect(hWindow, &rect, true)
NE MARCHE PAS !?
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
6 août 2006 à 18:46
Bon code ! Joky ! Je vien de le testé et il est encore mieux avec ScrollWindowEx(hWnd, 0, Down ? (+1):(-1), NULL, NULL, NULL, NULL, SW_INVALIDATE);

MERCI !
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
6 août 2006 à 23:43
Oui au début je m'étais basé sur cette affaire de rectangle de rectangle à redessiner plutôt que de redessiner toute la fenêtre qui était long et fastidieux par rapport à un petit rectangle
Mais bon me suis embrouiller.
ULARGE_INTEGERJokyQi=QI("Joky"
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
6 août 2006 à 23:48
Oué c'est casse couille à mort !
Sinon t'aurai pas une idée comment Effacé une procédure de fenètre ??
Parce que j'ai des button en bitmap avec du Sub-Classing mais j'arrive pas a les éffacer ! Tu pourai pas m'aider STP ???
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
6 août 2006 à 23:58
Là j'ai pas compris désolé

ULARGE_INTEGERJokyQi=QI("Joky"
0
Rejoignez-nous