Gå til innhold

Hvordan kan jeg få til rullende tekst i delphi applikasjonen min?


Anbefalte innlegg

Videoannonse
Annonse

Hvorfor skal man gjøre noe så vanskelig som å lage det i flash? Selv om man får kantutgjevning så lett i Delphi da :p

Men for å få en rulletekst som på film er det flere ting man kan gjøre. For eksempel man man bruke en memo og ta vekk en og en linje. Eller så kan man skrive en hel algoritme for å flytte og tegne teksten. Jeg tror kanskje det er dette du er ute etter, men jeg veit jo ikke :p

 

type
 TAlign = (txtLeft, txtMiddle, txtRight);

implentation

procedure TxtOut(Str: String; Form: TForm; TxtAlign: TAlign; TxtSize: Integer; TxtColor, BgColor: TColor);
var
StrList: TStrings;
i: Integer;
TxtHeight, TxtWidth: Integer;
Txt: String;
MemBmp: TBitmap;
begin
StrList: TStrings.Create;

while (Pos(';', Str) > 0) or (Pos(';', Str) < Length(Str)) do
 begin
  StrList.Add(Copy(Str, 0, Pos(';', Str) -1));
  Str := Copy(Str, Pos(';', Str) +1, Length(Str));
 end;

MemBmp := TBitmap.Create;
MemBmp.Height := Form.ClientHeight;
Membmp.Width := Form.ClientWidth;


with MemBmp.Canvas do
 begin
  Font.Size := TxtSize;
  Font.Color := TxtColor;

  TxtHeight := TextHeight('Wg');

  Brush.Color := BgColor;
  Pen.Color := BgColor;
  Rectangle(0, 0, MemBmp.Width, MemBmp.Height);

   for i := 0 to StrList.Count -1 do
    begin
     Txt := StrList.Item[i];

     TxtWidth := TextHeight(Txt);

     case TxtAlign of
       txtLeft:     begin
                        TextOut(i * (TxtHeight + 2), 0, Txt); 
                      end;
       txtMiddle: begin
                        TextOut(i * (TxtHeight + 2), (MemBmp.Width div 2) - (TxtWidth div 2), Txt);
                      end;
       txtRight:   begin
                        TextOut(i * (TxtHeight + 2), MemBmp.Width - TxtWidth, Txt);
                      end;
     end;
    end;
  end;

FreeAndNil(StrList);

i := Form.Height + 5;
repeat
 Form.Canvas.Brush := BgColor;
 Form.Canvas.Pen := BgColor;
 Form.Cancas.Rectangle(0, 0, Form.Width, Form.Height);

 Form.Canvas.Draw(0, i, MemBmp);
 Dec(i);
until
  (i <= -MemBmp.Height);

FreeAndNil(MemBmp);
end;

 

Håper denne koden funker, har ikke testet den siden jeg ikke har Delphi på denne pc-en. Altså er det en totalt utestet kode. Men håper den setter deg på sporet :)

Lenke til kommentar

Det er bare å sette seg ned og øve seg, starte med enkle programmer og utvikle det etterhvert :) Nå har jeg holdt på med Delphi i en stund, har vel blitt 4-5 år nå. Men Delphi har en utrolig bra hjelpefil, den hjelper mye. Og hvis ikke så har du jo sider som http://delphi.about.com, eller http://www.google.com er jo også en veldig nyttig kilde, hvis du søker etter riktig selvfølgelig :p

 

Men så lenge du holder på med Delphi, så vil du lære deg kode etterhvert :)

 

men du kan prøve å sette inn Application.ProcessMessages på slutten av repeat until blokken.

 

altså

 

repeat
 ...
 Application.ProcessMessages;
until
 ...

 

Dette kan hjelpe til å få det til å funke riktig :) Men godt jeg satt deg på riktig spor :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...