AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls TImage soll Transparent sein und Messages weiterleiten
Thema durchsuchen
Ansicht
Themen-Optionen

TImage soll Transparent sein und Messages weiterleiten

Ein Thema von Jonas Shinaniganz · begonnen am 4. Apr 2012 · letzter Beitrag vom 4. Apr 2012
Antwort Antwort
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 10:48
Immoment arbeite Ich an einer Komponente und brauche nun ein TImage, welches die ganze Komponente überdeckt und auf dem Ich zeichnen kann ohne die eigentliche Canvas der Komponente zu verwenden.

Code:
FZoomRectImg.Aling := alClient;
FZoomRectImg.Transparent := true;
FZoomRectImg.Picture.Bitmap.TransparentColor := TransColor;
Das Problem ist für mich eigentlich nur, wie ich sämtliche Windows-Messages die an das TImage gehen an meine dahinterliegende Komponente weiterleiten kann.

Also immer wenn TImage eine MESSAGE erhält vllt. ein Event auslösen, welches die Message weiter an meine Komponente gibt. Alternativ würde Ich auch TImage ableiten können und dort ausschalten das Messages überhaupt an TImage gehen.

Falls jemand Firemonkey benutzt, dort gibt es ein Boolsches Property Names HitTest, welches genau das macht, was ich nun in der VLC von XE1 haben möchte.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#2

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 11:03
Um etwas präziser zu sein, eigentlich brauche Ich nur etwas Hilfe beim Befehl: SendMessage();

Ich habe eine:
Zitat:
(var Message: TMessage);
und möchte diese nun an eine Instanz von meiner Komponenten-Klasse weiterleiten. Parameter u.ä. sollen nicht verändert werden.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#3

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 11:32
Immoment bekomme Ich die Fehlermeldung 'Element hat kein übergeordnetes Fenster'


Das führe Ich aus:
Delphi-Quellcode:
procedure TOverLayImg.WndProc(var Message: TMessage);
begin
  inherited;
  if Self.Parent <> nil then
    SendMessage(Parent.Handle, Message.Msg ,Message.WParam, Message.LParam);
end;
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 12:33
Ich weiß ja nicht was genau Du da tust, aber vielleicht hilft ein
if not (csloading in ComponentState) then ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 13:21
Wenn die Komponente den Parent komplett überdecken soll und du sozusagen auf dem Parent zeichen willst anstelle die Features von TImage zu nutzen wäre es viellleicht die einfachste Variante von der Parentkomponente abzuleiten und das Paint zu überschreiben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#6

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 14:03
Okay Ich versuche nochmal besser zu beschreiben was Ich mache:

Ich habe eine Klasse, TImage mit einer weiteren Prozedur welche aufgerufen wird wann immer eine Message gesendet wurde.

Delphi-Quellcode:
  TOverLayImg = class(TImage)
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

{ TOverLayImg }


procedure TOverLayImg.WndProc(var Message: TMessage);
begin
  inherited;
  if (Parent <> nil) and (TAdvCustomGraph(Parent).HandleAllocated) then
    SendMessage(TAdvCustomGraph(Parent).Handle, Message.Msg ,Message.WParam, Message.LParam);
end;
In der Prozedur reiche Ich jetzt die Message weiter, an den Parent des TOverLayImg, welches vollständig über der TAdvCustomGraph Instanz liegt.

Es ist ein Parent vorhanden deswegen bekomme Ich meine alte Fehlermeldung 'Element hat kein übergeordnetes Fenster' nicht mehr. Darum habe Ich mich gekümmert. Jetzt bekomme ich bei SendMessage eine Zugriffsverletzung bei Adresse blabla.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#7

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 14:10
Ich möchte die ja sozusagen Features von TImage nutzen,
Einfache Dinge, wie zb ein paar Striche und Kreise sollen dann auf dem TImage gezeichnet werden und auch wieder verschwinden, ohne dabei das Draw der Hauptkomponente auszulösen welche Hunderttausende von Punkten aus Arrays läd und sehr lange braucht um sich nach invalidate; wieder zu zeichnen.

vielleicht kann man es sich ganz gut wie eine weitere Ebene (wie zb bei photoshop) vorstellen.
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#8

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 14:38
Wenn Ich beim Msg Parameter eine 0 übergebe bekomme ich keine Fehlermeldung mehr aber auch keine Reaktion.

SendMessage(TAdvCustomGraph(Parent).Handle, 0, Message.WParam, Message.LParam);
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 15:06
Ich habe exakt das Verhalten mit einer abgeleiteten Paintbox so gelöst:

Delphi-Quellcode:
  TRaster = class(TPaintBox)
  private
    FLaserControl: TControl;
    procedure SetLaserControl(const Value: TControl);
  protected
    procedure CMHitTest(var Msg: TWMMouse); message CM_HITTEST;

...

procedure TRaster.CMHitTest(var Msg: TWMMouse);
begin
  inherited;
  Msg.Result := 0;
end;
Für andere Controls muss man eine ähnliche Lösung umsetzen (da dort nicht CHHitTest ausgewertet wird). Das müsste ich dann mal zu Hause nachschauen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#10

AW: TImage soll Transparent sein und Messages weiterleiten

  Alt 4. Apr 2012, 15:21
Super! Genau das habe Ich gebraucht!
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  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 16:32 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