Laufschrift



  • Hallo,

    der unten stehende Code ist aus diesem Post: https://www.c-plusplus.net/forum/39199-full

    Funktioniert super für den Text, der im Label steht. Mein Text ist aber länger und passt nicht in das Label. Hat hierfür jemand eine Lösungsidee ?

    Graphics::TBitmap *SaveBitmap; 
    TRect SrcRect; 
    TRect DestRect; 
    TRect LeftRect; 
    TRect RightRect;
    
    void __fastcall TForm1::FormCreate(TObject *Sender) 
    { 
        SaveBitmap=new Graphics::TBitmap(); 
        SaveBitmap->Height=Label1->Height; 
        SaveBitmap->Width=1; 
    
        SrcRect.left=1; 
        SrcRect.top=0; 
        SrcRect.right=Label1->Width; 
        SrcRect.bottom=Label1->Height; 
    
        DestRect.left=0; 
        DestRect.top=0; 
        DestRect.right=Label1->Width-1; 
        DestRect.bottom=Label1->Height; 
    
        LeftRect.left=0; 
        LeftRect.top=0; 
        LeftRect.right=1; 
        LeftRect.bottom=Label1->Height; 
    
        RightRect.left=Label1->Width-1; 
        RightRect.top=0; 
        RightRect.right=Label1->Width; 
        RightRect.bottom=Label1->Height; 
    }
    
    void __fastcall TForm1::FormDestroy(TObject *Sender) 
    { 
        delete SaveBitmap; 
    }
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender) 
    { 
        SaveBitmap->Canvas->CopyRect(LeftRect, Label1->Canvas, LeftRect); 
        Label1->Canvas->CopyRect(DestRect, Label1->Canvas, SrcRect); 
        Label1->Canvas->CopyRect(RightRect, SaveBitmap->Canvas, LeftRect); 
    }
    


  • Ich hab es jetzt so gemacht. Label rechtsbündig. Es stört, dass es ein wenig rackelig ist. Im einzelnen Projekt sieht es mit Sleep(200) ganz gut aus, in einem größeren Projekt muss ich Sleep(100) nehmen. Werd das Ganze in einen Timer einbauen, vielleicht hilft das.

    Problem ist, dass ich nicht automatisch erkennen kann, wann in dem Label ganz links ein Buchstabe steht. Hab das aktuell fest verdrahtet mit 50 Zeichen.

    Vielleicht gibt es da eine Möglichkeit ?

    Danke !

    int j = 1;
    	for (int i = 1; i < Edit1->Text.Length() + 1; i++) {
    		if (i >= 50) {
    			j+=1;
    		}
            else {
                j = i;
            }
    		Label1->Caption = Label1->Caption + Edit1->Text.SubString(j, 1);
    		Sleep(200);
    		Application->ProcessMessages();
    	}
    


  • Warum nicht einfach TLabel* auf AutoSize=true setzen und dann das Label als Objekt hin- und herschieben? Denn dann kannst du vom Label Width abgreifen und damit arbeiten. Wichtig ist nur, dass das darnterliegende Objekt keine Scrollbars hat, sonst sieht das unvorteilhaft aus.


Anmelden zum Antworten