28. juli 2003 - 18:17Der er
18 kommentarer og 3 løsninger
Form canvas
Jeg bruger min form til at indsætte nogle billeder i en lille animation (derfor kan jeg ikke putte dem i et Timage), men problemet er hvis formen får noget over sig (eks. et andet vindue), så forsvinder det jeg har malet på formen, der hvor det andet har været... hvordan ungår jeg det? jeg putter et billede i formens canvas således: Canvas.draw(0,0,Bitmap)
Cautoo -> Hvorfor kan du ikke bruge TImage? Du kan også prøve med en PaintBox, der tegner du også i OnPaint, ligesom med formen.
Lav et nyt, tomt projekt. Indsæt en TTimer på din Form1. Den skal hedde Timer1. Sæt Enabled til true og Interval til 1000. Brug følgende kode i timerens OnTimer-event:
Nu skal du indsætte en TPaintBox på din form. Kald den PaintBox1 og giv den en rimelig størrelse. Brug følgende kode i paintboxens OnPaint-event:
procedure TForm1.PaintBox1Paint(Sender: TObject); begin with PaintBox1 do begin Canvas.Font.Color := clRed; Canvas.Font.Size := 30; Canvas.Font.Name := 'Verdana';
Jeg har læst spørgsmålet igen. Svaret er det samme. Du kan tegne på et tomt TImage på samme måde, som du kan tegne på formen. Du har bare ikke det problem med at det bliver visket ud af et andet vindue.
Jeg kan heller ikke se hvorfor du ikke skulle kunne bruge en TImage - Jeg ville nærmest sige at det er ret oplagt at bruge denne komponent til den form for projekt som du beskriver! Men hvis du stædigt insistere på IKKE at bruge en TImage, kan du lave en procedure der modtager Windows Messages, og når der modtages beskeder fra windows der omhandler noget update/repaint-agtigt så skal din canvas repaintes. Jeg vil umiddelbart sige at det er en meget besværlig vej (med mindre du har andre ting, der også behøves "behandling" af Windows Messages) at gå når det samme kan opnåes med TImage. En lidt mere simpel løsning er vel bare at lade en TTimer opdatere din canvas med et passende interval!
Af hensyn til TImage har jeg prøvet at benytte det, men det giver "flimmer" når jeg opdaterer billedet, har jeg også haft spurgt om hjælp til... http://www.eksperten.dk/spm/377220 hmm... det jeg er ved at lave er at enkelt præsentationssytem som gør det muligt at vise præsentationer på en computer, og styre fra en anden, sådan at man kan ændre præsentationen under igangværelse..., altså et slags interaktivt præsentationsprogram... På styreenheden har jeg så et miniareture billede af det resultat som man har lavet, eller er i gang med at lave, dvs. det opdaterers hver gang man ændrer på end indstilling, men da jeg havde det på et TImage gav det flimmer, da jeg så brugte formens canvas i stedet virkede det fint... lige til jeg fandt ud af at det bliver slettet af overlappende objekter...
hele projektet med exe fil og kode kan hentes på http://cautoo.dk/project1.zip ^^ det interaktive billede ændrer sig når man skriver en tekst i editfeltet hvor der står Tekst foran og når man ændrer i de medhørende komponenter...
var Bitmap : TBitmap; procedure TForm1.FormCreate(Sender: TObject); begin Bitmap := TBitmap.Create; Bitmap.Width := 256; Bitmap.Height := 129; end;
procedure TForm1.FormShow(Sender: TObject); begin Edit1Change(nil); end;
procedure TForm1.Edit1Change(Sender: TObject); begin with Bitmap.Canvas do begin FillRect(Rect(0,0,Bitmap.Width,Bitmap.Height)); TextOut(0,0,Edit1.Text); end; Image1.Picture.Assign(Bitmap); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Bitmap.Free; end;
PS: Hvis du bare bliver ved med at create vil du hurtig optage alt hukommelse på din computer - dette vil dermed sløve den - men jeg tror nu ikke det er det :))
høø... den havde åbenbart også doubblebuffered... hvad er ulæmpen ved at bruge den siden at den kan slåes fra?
Synes godt om
Slettet bruger
29. juli 2003 - 19:28#21
Ved det ik, men kunne forstille mig at det bruger mere hukommelse eller sådan noget, ellers kunne formen vel ligeså godt være doublebufferet som standard.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.