Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem Graphic32 und Paintbox (https://www.delphipraxis.net/47148-problem-graphic32-und-paintbox.html)

BrunoT 7. Jun 2005 08:13


Problem Graphic32 und Paintbox
 
Hallo DP'ler,


ich habe bisher mit Paintbox und Buffer- Bitmap gearbeitet und mit dem OnPaint- Ereignis über BtlBlt das Bitmap auf die Paintbox kopiert.
Das funktionierte mit
Delphi-Quellcode:
procedure THauptform.LadenClick(Sender: TObject);
var
  JpBitmap: TJPEGImage;
begin
  JpBitmap := TJPEGImage.Create;
  JpBitmap.LoadFromFile(Bildname);
  Bitmap.Assign(JpBitmap);          //Buffer- Bitmap
  JpBitmap.Free;
  LeinwandPaint(self);               //Neuzeichnen
end;
...

procedure THauptform.LeinwandPaint(Sender: TObject);
begin
  BitBlt(Leinwand.Canvas.Handle, 0, 0, Bitmap.Width,
    Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
end;
Mit dem OnPaint-Ereignis habe ich die Paintbox neu gezeichnet, wenn nötig.


Die Paintbox ist in einer Scrollbox.

=========================================
Umstieg auf Graphic32



Nun besitzt ja Paintbox32 ein eigenes Buffer- Bitmap aber wenn ich ein Bild in das Buffer- Bitmap lade
und dann z.B. scrolle ist die Paintbox schwarz (warum eigentlich nicht weiss???).
Ein OnPaint-Ereignis fehlt hier.
Wenn ich aber die Paintbox32 mit folgenden Befehlen fülle, kann ich scrollen :gruebel: !?!

Delphi-Quellcode:
  Leinwand.Buffer.Canvas.Brush.Color := clwhite;
  Leinwand.Buffer.Canvas.Polygon([Point(0, 0), Point(0, Leinwand.Height),
    Point(Leinwand.Width, Leinwand.Height), Point(Leinwand.Width, 0)]);
  for i := 1 to 20 do //Testgitter
  With Leinwand.Buffer.Canvas Do
  Begin
    MoveTo(I*100,1);
    LineTo(I*100,2336);
  end;
  for i := 1 to 40 do
  With Leinwand.Buffer.Canvas Do
  Begin
    MoveTo(1,I*100);
    LineTo(1656,I*100);
  end;
  LeinwandPaint(self); //rufe ich auf, um Bitmap auf die Paintbox32 zu zeichnen
end;
Frage:
1. Warum gibt es kein OnPaint-Ereignis?
2. Sollte ich lieber Image32 anstelle der Paintbox nehmen? (Flackert das Bild dann wieder?)
3. Wie kann ich das Bild scrollen, ohne das Bereiche, die vorher ausserhalb lagen, schwarz werden?

mfg

BrunoT

barf00s 7. Jun 2005 08:14

Re: Problem Graphic32 und Paintbox
 
der buffer wird internbenützt...

versuchs dochmal mit dem ".Bitmap" ansetlle vom ".Buffer"


öhm ich persönlich verwende ja anstelle der paintbox lieber son TImage32 :)

BrunoT 7. Jun 2005 08:32

Re: Problem Graphic32 und Paintbox
 
Hallo barf00s,

danke für die schnelle Antwort, aber es gibt kein Paintbox32.Bitmap.
Das einzige TBitmap32 ist eben der Paintbox32.Buffer.

@TImage32
Das Problem ist, ich habe vorher mit TImage gearbeitet und hatte Flackererscheinungen, wenn ich Teile davon neu gezeichnet habe.
Deshalb war ich ja auf TPaintbox mit Bitmap als Buffer umgestiegen. Was ja auch super geklappt hat.
Nun bin ich über Hinweise zur Graphic32- Bibliothek gestossen und wollte diese natürlich nutzen. (soll ja schneller sein).

mfg

BrunoT

barf00s 7. Jun 2005 08:41

Re: Problem Graphic32 und Paintbox
 
ach PaintBox hat kein Bitmap ^^ nagut :)
wie gesagt ich habs immer mitnem TImage32 gemacht

mein krams aufnen Bitmap32 gemalt und des dann auf den canvas/bitmap vom TImage32 ge"draw"ed

so gehts beinem std TImage/Bitmap auch (bzw mach ichs so)

dizzy 7. Jun 2005 13:03

Re: Problem Graphic32 und Paintbox
 
Die Paintbox32 hat ein Ereignis "OnPaintBuffer". Das klingt doch vielversprechend oder? ;) Allerdings habe ich die Paintbox bisher nicht benutzt, da ich dafür keinen Grund hatte. Denn: Beim Image32 flackert nix, da es von Hause aus doublebuffered ist. Um ein Neuzeichnen zu verhindern während man mehrere Änderungen am TImage32.Bitmap macht, und nur ein mal neuzuzeichnen schaue dir mal die Methoden:
TImage32.BeginUpdate;
TImage32.EndUpdate;
TImage32.Changed;
an.

Zum scrollen jedoch mache ich mir nie die Mühe das selbst zu programmieren, sondern nehme gleich ein TImgView32 :zwinker:


Gruss,
Fabian

Khabarakh 7. Jun 2005 13:34

Re: Problem Graphic32 und Paintbox
 
Genau, dafür ist TImgView32 da.
Für Animationen mache ich es so:
  • TPaintbox32, Algin = alClient
  • Direkt mit TPaintbox32.Buffer arbeiten
  • Am Ende des Frames TPaintbox32.Flush aufrufen

PS: Wenn du die Geschwindigkeit von GR32 genießen willst, solltest du nicht die TBitmap.TCanvas-Methoden benutzen, sonst wird natürlich nichts schneller :wink: .

BrunoT 7. Jun 2005 14:14

Re: Problem Graphic32 und Paintbox
 
Liste der Anhänge anzeigen (Anzahl: 4)
Danke für eure Mühe bisher,

@Khabarakh,dizzy

schaut euch doch mal bitte das Beispiel an.

Links Paintbox32 rechts Paintbox. Das Bild veschwindet beim Scrollen links, die Grafik nicht.

Ich wills ja nur verstehen. :wall: :wall: :wall: :wall:

TImgView32 habe ich noch nicht getestet.

mfg

BrunoT

He ich hänge noch 'nen Screenshot dran

BrunoT 7. Jun 2005 14:37

Re: Problem Graphic32 und Paintbox
 
THX moch mal :firejump: :bouncing4: :bounce1: :firejump:

ich habe auf TImgView32 umgestellt. (gewusst hätte ich es schon gern warum das Bild verschwindet und die Grafik nicht). :gruebel:

mfg

BrunoT :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz