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;