![]() |
Bitmap Transparent auf ein Formular über andere Komponenten zeichnen
Hallo,
ist es möglich ein BMP dynamisch auf einem Formular übergeordnet über alle Kompetenten zu zeichnen? Im Moment zeichne ich auf den Screen(leider nicht Transparent) und nicht auf das Formular. Die Idee dahinter: Bei einer Fehleingabe kann man mit z.B. Edit1.SetFocus, der Komponente den Focus übergeben. Jetzt möchte ich noch zusätzlich, dass ein Pfeil.bmp geladen und neben dem Edit1 Transparent gezeichnet wird. Damit der User genau sieht, "Hallo, hier stimmt was nicht". Folgende Aufrufe habe ich schon
Code:
If Edit1.Text ='0'Then
Begin ShowMessage('Fehler.....'); Edit1.Text:=''; Edit1.SetFocus; Get_HintPos(Form1,Edit1); Exit; End;
Code:
//Position der Komponente zum positionieren herausfinden
procedure Get_HintPos(Formular:TForm;KKomp:TControl); var i : integer; P : TPoint; Hint_KLeft : Integer; Hint_KTop : Integer; Hint_KWidth : Integer; Hint_KHeight : Integer; Hint_Form : TForm; Hint_KompName : String; Hint_Komp : TControl; Hint_X : Integer; Hint_Y : Integer; begin for i := 0 to Formular.ComponentCount -1 do if (Formular.Components[i] is TControl) then begin if KKomp.Name = Formular.Components[i].Name then begin P:=KKomp.ClientToScreen(Point((Formular.Components[i] as TControl).Left, (Formular.Components[i] as TControl).Top)); Hint_Form := Formular; Hint_Komp := KKomp; Hint_KompName:= KKomp.Name; Hint_X := P.X; Hint_Y := P.Y; HintK_Left := (Formular.Components[i] as TControl).Left; HintK_Top := (Formular.Components[i] as TControl).Top; HintK_Width := (Formular.Components[i] as TControl).width; HintK_Height := (Formular.Components[i] as TControl).Height; break; end; end; Set_Hint(Formular,Hint_X,Hint_Y); end; //Bild zeichnen procedure Set_Hint(Formular:TForm;x,y:Integer); var Bitmap : TBitmap; ScreenDC : HDC; begin try ScreenDC := GetWindowDC(0); Bitmap:= TBitmap.Create; Bitmap.PixelFormat := pf32bit; Bitmap.HandleType := bmDIB; Bitmap.Transparent := True; Bitmap.TransparentColor := clwhite; Bitmap.LoadFromFile('c:\......bmp'); BitBlt(ScreenDC, x, y, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY); finally Bitmap.Free; ReleaseDC(0, ScreenDC); end; end; |
AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen
Sollte doch auch mit einem TImage möglich sein, wenn es frei mit Top/Left bewegt werden kann.
Dann einfach dahin positionieren wo es sein soll, und mit Visible anzeigen lassen. Vielleicht noch die ![]() mit Paneln angeordnet wird. Rollo |
AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen
... ich habe etwas ähnliches mal mit einem extra Overlay Fenster mit Transparent-Color = clWindow und folgender CreateParams procedure.
In dem Fenster kannst du dann auf den Canvas zeichnen. Den Rest mach dann Windows für dich.
Delphi-Quellcode:
unit ufrmOverlay;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls; type TfrmOverlay = class(TForm) protected procedure CreateParams(var Params: TCreateParams); override; private { Private-Deklarationen } public { Public-Deklarationen } end; implementation {$R *.dfm} { TfrmOverlay } procedure TfrmOverlay.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if Assigned(Application.MainForm) then begin Params.WndParent := GetDesktopWindow; Params.Style := WS_ChildWindow; Params.EXStyle := WS_EX_NoActivate; end; end; end. |
AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen
Man kann Controls und Formulare übrigens auch "ausstanzen":
![]() Eine regelmäßige Pfeilform könnte man damit realisieren. Mit Hittest könnte man das Control (den sichtbaren Pfeil) für die Maus "durchlässig" machen. Vielleicht wäre das ein alternativer Ansatz. |
AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen
Mir gefaellt eine andere Loesung auch ganz gut.
Dein TEdit besitzt doch eine Hintergrundfarbe. Bei falscher Eingabe kannst du die doch auf rot setzen:
Delphi-Quellcode:
und bei richtiger Eingabe wieder zurueck auf ihren
Edit1.Color:=clMaroon;
urspruenglichen Wert. Nur so eine Idee... MfG, Terence |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz