AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Transparentes Editfeld/Memo
Thema durchsuchen
Ansicht
Themen-Optionen

Transparentes Editfeld/Memo

Ein Thema von DarkLord0 · begonnen am 12. Jun 2007 · letzter Beitrag vom 14. Jun 2007
Antwort Antwort
DarkLord0

Registriert seit: 31. Okt 2004
59 Beiträge
 
#1

Transparentes Editfeld/Memo

  Alt 12. Jun 2007, 09:32
Hi!

In meinem Programm soll der User auf ein Bild (Paintbox) Text schreiben können, sodass das Bild im Hintergrund nur durch den Text überdeckt wird, nicht durch Hintergrundfarbe des Textes (d.h. der Text soll keine Hintergrundfarbe besitzen).
Das Bild soll möglichst selten und dann nur zu möglichst kleinen Teilen neu gemalt werden, um Flimmern zu vermeiden. Ich habe ein paar "transparent" Komponenten aus dem Internet ausprobiert, aber bei diesen wurde diese Sache immer so gelöst, dass die Paintbox als ganzes ein OnPaint Signal bekommen hat (wenn man z.B. Buchstaben löscht und das Bild teilweise neu gemalt werden muss). Ich würde gerne erreichen, dass immer nur ein kleiner Teil des Bildes neu gemalt wird.
Eine Möglichkeit wäre: Falls Text gelöscht wird (beim Schreiben von neuem Text ist es ja nicht erforderlich irgendwas am Bild zu ändern), soll die Paintbox nicht nur eine Nachricht erhalten, dass neu gemalt werden muss, sondern auch an welcher Stelle. Dann könnte ich nur diese Pixel neu schreiben lassen. Ich weiß aber leider nicht, wie man so etwas realisieren könnte (sodass die Textfläche ansonsten immernoch transparent ist).
Wie wäre so etwas machbar? Ich benutze Delphi6.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Transparentes Editfeld/Memo

  Alt 12. Jun 2007, 13:53
Zitat von DarkLord0:
Hi!

In meinem Programm soll der User auf ein Bild (Paintbox) Text schreiben können, sodass das Bild im Hintergrund nur durch den Text überdeckt wird, nicht durch Hintergrundfarbe des Textes (d.h. der Text soll keine Hintergrundfarbe besitzen).
Das könntest du mit
paintbox1.Canvas.Brush.Style := bsClear; machen.

Um den Text löschen zu können, müsstest du die Position des entsprechenden Textes kennen. Dann kopierst du aus dem Originalbild, was du vorher in den Speicher geladen hast zum Beispiel mit CopyRect() die entsprechenden Bereiche heraus und überzeichnest damit den Text.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
DarkLord0

Registriert seit: 31. Okt 2004
59 Beiträge
 
#3

Re: Transparentes Editfeld/Memo

  Alt 12. Jun 2007, 14:45
Ich möchte es am besten so haben, dass der User auf dem Bild wie auf einem Memo schreiben kann (sodass auch angezeigt wird, wo sich der Cursor gerade befindet usw.). Ich habe mit Paintbox vorher noch nie was gemacht, hat die sowas integriert? Oder wie meintest du das jetzt
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Transparentes Editfeld/Memo

  Alt 13. Jun 2007, 14:40
Hallo,

du möchtest praktisch aus einer Paintbox ein Memo machen?
Das wird aber aufwendig sein und die PaintBox wird zu sowas wohl auch nicht besonders gut geeignet sein, da sie kein WinControl ist. Du müsstest praktisch LineBreak, Text selektieren, scrollen usw alles selber machen.
Eventuell könntest du trotzdem ein Memo nehmen und dort die Nachricht WM_PAINT und WM_CHAR abfangen. Ansonsten könntest du eine eigene Komponente erstellen.
Ich habe dir mal schnell eine kleine Demo geschrieben, damit du weist was ich meinte. Du kannst dort Text eingeben und ihn wieder mit der Back Taste löschen dabei wird CopyRect verwendet. Den Cursor aus dem Memo habe ich jedoch noch nicht wegbekommen, dazu könnte man aber eine andere Komponente nehmen.
Angehängte Dateien
Dateityp: zip memo_276.zip (8,5 KB, 19x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
DarkLord0

Registriert seit: 31. Okt 2004
59 Beiträge
 
#5

Re: Transparentes Editfeld/Memo

  Alt 14. Jun 2007, 00:09
Ich verstehe was du meinst, auf diese Weise würde es ziemlich aufwendig. In deinem Beispielprogramm wird jetzt das Memo nur noch benutzt, um zu erfahren, wann welche Fensternachricht geschickt wurde (ist also fast überflüssig). Wäre es nicht möglich, mehr von den vorhandenen Funktionen von TMemo auszunutzen? Also dass z.B. TMemo seinen Text wie gewohnt schreibt, mit der Ausnahme, dass es vorher nicht den ganzen Hintergrund löscht usw. Die Eingabe der Returntaste ändert ja auch auch nur die Cursorposition (das Scrollen wenn man am Ende des Memos angekommen ist brauche in meiner Anwendung nicht).
Aber ich verstehe auch nicht wirklich wie das mit der Fensternachricht WM_PAINT genau läuft. Ich habe einmal ausgeben lassen, wann diese Nachricht bei einem Memo bei "normalem Betrieb" ankommt. Komischerweise passiert z.B. wenn man die Backspace Taste drückt nur manchmal. Ich hätte erwartet, dass es immer passiert.
  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 02:29 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