Einzelnen Beitrag anzeigen

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