In Paint: Resize erkennen und Inhalt von Canvas sichern

Rund um die LCL und andere Komponenten
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Mit einmal erstellen meine ich nur beim erstellen der Klasse. Dort einmal Intallisiern. nicht jedes mal beim zeichnen ein Buffer:=TBitMap.Create machen sondern nur einmal bei Create.
Die Liste kann sehr lang werden, dann werden Unmengen von Speicherplatz verbraten
Wieso ? du brauchst doch nur EINEN Buffer. nicht mehrer.
Wenn die Breite geändert wird, muss sowieso komplett neu gezeichnet werden, auch beim Verkleinern, weil auch rechtsbündig Text dargestellt wird
Ja ! Sobald sich die Größe ändern, muss auch der Buffer angepasst werden. Unter Linux musst du dann einmal mit buffer.canvas.fillrect(..) alles übermallen
Mit FillRect alles übermalen kann ich mir schenken:
NEIN ! Sonst kommt es unter LINUX zu da stellungs Fehler. !
EInmal nach dem Größen Ändern und dann beim Zeichnen. Dieser Erfahrung habe ich gemacht !!!
BitBlt kenne ich gar nicht, es scheint aber windows-spezifisch zu sein.

Code: Alles auswählen

as gibt es auch unter Linux ! nicht nur für Windows !
 
In meinen Anwendungen unter Linux verwende ich es nur....
[code=laz]bitblt(OutCanvas.handle, x1,y1,w,h,SoruceCanvas.Handle, x1,y1,srccopy);
Musst du aber anpassen.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Create: Ajo, das TBitmap.Create steht bei mir direkt im Create der ListBox ;-)

Speicherplatz: Ich hatte vermutet, du meinst, dass ich die gesamte Liste in den Buffer zeichne. Das hätte ein u.U. monströs großes Bild gegeben...

FillRect: Wenn Paint nach dem Resize aufgerufen wird, dann ist im Canvas der Listbox schon alles mit der Hintergrundfarbe gezeichnet. Dort muss ich demnach wohl nicht noch einmal Fillrect aufrufen? Wenn ich im Buffer das Bild neu Zeichne, ist es sicherlich sinnvoll, es vorher weiß zu malen. Habe ich dich richtig verstanden?

BitBlt: Damit kann ich sicherlich was anfangen, danke, werde das nachher mal ausprobieren.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

erstellst du eine eigene ListBox ?
oder was hast du genau vor ?
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Ja, habe ich schon ;-).
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

achso... Kannst du mir mal Zeigen wie du deine gemacht hast ?
Ich habe schon verschiedene Varianten erstellt... mit keiner war ich so recht zufrieden.

Die nächste soll besser werden die ich zur zeit zwischendurch plane...
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Die Unit hat momentan etwa 520 Zeilen, möchte die nicht komplett reinkopieren ;-)

Grobabriss:
-Jedes Element ist ein Objekt mit Eigenschaften wie Farbe etc.
-Die Objekte sind in einer TList gespeichert
-Indexed speichert das Objekt, welches gerade den Index besitzt
-Gezeichnet wird Zeilenweise in einer For-Schleife nur das nötige, z.B. wird beim Scrollen wird das Bild verschoben (Canvas.CopyRect, kein Fehlverhalten ersichtlich) und lediglich die fehlenden Zeilen nachgezeichnet
-Jedes Element hat einen linksbündigen und einen rechtsbündigen Text, passt nicht alles hin, wird der linksbündige abgeschnitten und dies mit '...' angezeigt (die Listbox wird als Playliste eingesetzt, rechts werden die Laufzeiten dargestellt)

Das ist denke ich das wichtigste, worin sie sich von der bekannten Standard-Listbox unterscheidet.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Können die Zeilen unterschiedlich Groß sein ?

Dann könnte deine ListBox ja auch als ListView dienen, mit einigen Anpassungen..
Ist sie "Sinkbar" ? Also lässt sich die Farben und das aussehen einstellen ?

Klinkt nicht schlecht. Zeichnest du nur den Sichtbaren Bereich in den Buffer ?
und alles andere nicht ?

Ist die ListBox direkt von TCustomControl abgeleitet ?
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Ich hab sie direkt von TPanel abgeleitet, dem ich das Zeichnen der Rahmen etc. überlasse. in dessen Clientbereich zeichne ich meine Zeilen, alle so groß, wie die Schriftgröße es vorgibt, und die ist nur einmal für die Komponente einstellbar. Das lässt sich aber ja bei Bedarf leicht ändern ;-) Wie es mit Skins aussieht habe ich keine Ahnung. In den Buffer schreibe ich genau diesen Clientbereich.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Interessant. Ich meine jetzt ob die Einträge in der Listbox unterschiedlich groß sein könnten.
z.b. könnte ein Eintrag ja auch aus mehren Einträgen bestehen:

Eintrag1
Eintrag1A
Eintrag1B
Eintrag2
Eintrag2A
ich hoffe du siehst was ich meine....
So eine Listbox habe ich bei meiner GUI erstellt. Allerdings ohne Scroll Funktion.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

as gibt es auch unter Linux ! nicht nur für Windows !
Nein, bitblt wird von Lazarus emuliert gibts unter Linux nicht.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ach so... aber ich verwende es aufjedenfall unter Linux. Wie es intern geregelt ist weiß ich nicht.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Hm, ich habs gerade umgebaut, aber keine Änderung. Es ist wohl doch einzig meiner Onboard-Shared-Memory-Grafikkarte geschuldet ;-). Da es also offenbar keinen Vorteil bringt, werde ich es wieder rausschmeißen und mit der alten Version weiterarbeiten. Trotzdem Danke für die Unterstützung!
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Antworten