AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Verhindern, dass Hintergrund automatisch gemalt wird
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern, dass Hintergrund automatisch gemalt wird

Ein Thema von Dosenelepfand · begonnen am 16. Sep 2006 · letzter Beitrag vom 18. Sep 2006
Antwort Antwort
Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#1

Verhindern, dass Hintergrund automatisch gemalt wird

  Alt 16. Sep 2006, 22:52
Hallo!

Ich möchte, dass bei dem Control, das ich z.Z. schreibe, der Hintergrund nicht automatisch in der gefärbt wird, bevor ich mit dem Zeichnen beginnen kann. Dazu habe ich bereits die WM_ERASEBKGND-Nachricht abgefangen und den Rückgabewert auf 1 gesetzt. Dennoch wird der Hintergrund vor jedem Zeichenvorgang komplett schwarz gefärbt. Das Control stammt von einem TWinControl ab, zum Zeichnen habe ich die Paint-Methode überschrieben. Füge ich stattdessen eine Methode WMPaint hinzu, die die WM_PAINT-Nachricht abfängt, so erreiche ich, dass der Hintergrund nicht bei jedem WM_PAINT eingefärbt wird. Allerdings unterdrücke ich ohne einen inherited-Aufruf auch das Zeichnen von Komponenten, die meine Komponente enthält (in meinem Falle eine Scrollbar). Gibt es eine Möglichkeit, wirklich nur das Färben des Hintergrundes zu verhindern?


Liebe Grüße,
Hanno
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#2

Re: Verhindern, dass Hintergrund automatisch gemalt wird

  Alt 17. Sep 2006, 19:53
Hallo!

WM_ERASEBKGND ist die Lösung.

Hast Du dannach inherited aufgerufen? Falls ja klappts nicht!

Delphi-Quellcode:
procedure TWinControl.WMEraseBkgnd(var Msg:TWMEraseBkgnd);
begin
   Msg.Result:=LResult(False);
end;
Dann sollte es gehen.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Verhindern, dass Hintergrund automatisch gemalt wird

  Alt 18. Sep 2006, 08:06
Hallo.

Danke für deine Hilfe. Allerdings habe ich dies bereits getan und es funktioniert immer noch nicht.

Ich zeichne in der überschriebenen TWinControl.Paint-Prozedur. Wenn ich in dieser ein inherited aufrufe, wird der Hintergrund auf mit der gesetzten Hintergrundfarbe gefärbt, wenn ich es weglasse, so wird er schwarz gefärbt.

Wenn ich die WM_PAINT Nachricht abfange, so wird überhaupt nichts mehr gedruckt, also auch keine enthaltenen Steuerelemente, und zudem entsteht ein Flimmern (funktioniert die Eigenschaft DoubleBuffered dann nicht mehr?) Aus diesem Grund versuche ich eben, bloß etwas zu finden, das lediglich verhindert, dass der Hintergrund gelöscht wird, bevor der Zeichenvorgang beginnt.


Liebe Grüße,
Hanno
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Verhindern, dass Hintergrund automatisch gemalt wird

  Alt 18. Sep 2006, 08:22
ich versteh noch nicht welchen Sinn das bei einem Wincontrol haben soll. Was hast du vor? Vielleicht gibt es eine bessere Lösung. Denn wenn du nichts zeischnest muss ja auch irgendwas da sein (es ich nunmal nicht möglich das man den Bildschirm transparent macht das man nach hinten durschchauen kann).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Verhindern, dass Hintergrund automatisch gemalt wird

  Alt 18. Sep 2006, 09:30
Hallo!

Ich schreibe derzeit eine Textkomponente. Dabei soll bei Texteingaben allerdings nicht immer alles neu gezeichnet werden, sondern eben nur die Zeile / die Zeilen, die von der aktuellen Änderung betroffen sind. Daher sollen die alten Zeilen auf der Ausgabe unangetastet bleiben und insbesondere nicht beim Start des Zeichnens überpinselt werden.

Was schlägst du vor?


Liebe Grüße,
Hanno
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#6

Re: Verhindern, dass Hintergrund automatisch gemalt wird

  Alt 18. Sep 2006, 17:13
SirThornberry hat schon recht, irgendwas mußt gezeichnet werden, sonst sieht man das darunter liegende Fenster...

Meine empfehlung ist, bei Start der Texteingabe das Fenster komplett anzumalen, und bei Änderungen durch Tastatureingaben nur die Paint procedure aufrufen.
Nicht mit Refresh oder Repaint, damit erzwingst Du einen Neuaufbau des Hintergrundes.

Um besser helfen zu können platziere doch den Code, mit dem Du Probleme hast.

Folgendes ist eine Testkomponente mit der ich früher Experimentiert habe, sie zeigt den Umgang mit WM_ERASEBKGND.
Angehängte Dateien
Dateityp: zip sspanels_425.zip (1,2 KB, 17x aufgerufen)
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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