AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Bitmap Transparent auf ein Formular über andere Komponenten zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap Transparent auf ein Formular über andere Komponenten zeichnen

Ein Thema von jayjay77 · begonnen am 3. Aug 2016 · letzter Beitrag vom 8. Aug 2016
Antwort Antwort
jayjay77

Registriert seit: 29. Okt 2013
7 Beiträge
 
Delphi 10.4 Sydney
 
#1

Bitmap Transparent auf ein Formular über andere Komponenten zeichnen

  Alt 3. Aug 2016, 00:57
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;
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#2

AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen

  Alt 3. Aug 2016, 19:57
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 Z-Oder ändern, aber ich würde mal annehmen das man das nicht braucht wenn es geschickt
mit Paneln angeordnet wird.


Rollo
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
376 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen

  Alt 3. Aug 2016, 21:56
... 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.
Andreas Schachtner
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen

  Alt 4. Aug 2016, 02:06
Man kann Controls und Formulare übrigens auch "ausstanzen": http://www.delphipraxis.net/159798-t...-mit-loch.html
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
tcoman
(Gast)

n/a Beiträge
 
#5

AW: Bitmap Transparent auf ein Formular über andere Komponenten zeichnen

  Alt 8. Aug 2016, 19:22
Mir gefaellt eine andere Loesung auch ganz gut.
Dein TEdit besitzt doch eine Hintergrundfarbe.
Bei falscher Eingabe kannst du die doch auf rot
setzen:  Edit1.Color:=clMaroon; und bei richtiger Eingabe wieder zurueck auf ihren
urspruenglichen Wert.

Nur so eine Idee...
MfG,
Terence
  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:49 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