![]() |
Control mit handle
Gibt es noch ein standart Control auf den man bilder legen kann welches auch ein Handle besitzt ?
Ähnlich TPanel ? Mein Problem nehme ich TPanel und setze das TImage als parent darauf dann habe ich kein Handle mehr. bzw.. TImage legt sich dann drüber und ich kann meine Form nicht mehr ziehen. gruss Emil |
Re: Control mit handle
Jedes von TWinControl abgeleitete Control
Warum machst du das Image zum Parent des Panels? |
Re: Control mit handle
Zitat:
Ich habe einen Skin auf diesen habe ich TPanel gelegt um den in seinen ausmaßen zu verändern das unschöne dabei kann auf diesen aus einen Bitmap ausschnitt innerhalb eines Bildes nicht drauf zeichnen. Also der ausschnitt soll darauf gelegt werden. Bei TImage kann ich das bild auflegen dieses stellt mir aber das passende Handle nicht zur verfügung gruss Emil |
Re: Control mit handle
Aber warum das Image als Parent des Panels und nicht umgekehrt?
|
Re: Control mit handle
Zitat:
Image.Parent := TPanel; So Habe ich aber das problem das ich nicht mehr an das TPanel heran komme um die Form zu ziehen. Gibt es eine andere möglichkeit ein bild darauf zu zeichnen ? Oder ein alternatives Control. Sieht bescheiden aus wenn ich da ein rotes Quadrat auf dem Skin habe gruss Emil |
Re: Control mit handle
TPaintBox
|
Re: Control mit handle
Zitat:
es gibt hier nur ein Handle TPaintBox.canvas.Handle Ich benötige aber TPaintBox.Handle so wie beim TPanel. Deshalb ja auch meine frage da ich nichts vergleichbares finde auf das man auch noch ein Bild Bliten kann. gruss Emil |
Re: Control mit handle
Das ist meine Funktion welche den Skin stepweise vergrößert oder verkleinert.
Delphi-Quellcode:
wenn ich nun ein normales Image nehme und Image.canvas.handle anstelle von picFormResize.Handle(=TPanel) nehme funktioniert das ganze mit der größenänderung nicht mehr.
procedure Tfrm_Gen.picFormResizeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer); begin If ssLeft in Shift Then mDrag := True end; procedure Tfrm_Gen.picFormResizeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); Var L : Integer; //Form links T : Integer; //Form Top W : Integer; //form weite H : Integer; //Form Höhe mPBRec : TRECT; //'Record der PicBox POINT : TPOINT; //'Maus Position begin L := self.left; T := self.top; W := self.Width; H := self.Height; //MouseDown ereignis ausgelößt? If mDrag = True Then begin //Aktuelle Position der PictureBox ermitteln GetWindowRect(picFormResize.Handle, mPBRec); //Aktuelle Cursor Position ermitteln GetCursorPos(POINT); If (POINT.x >= mPBRec.Right - 5) And (POINT.y >= mPBRec.Bottom - 5) Then begin self.left := L; self.top := T; self.Width := W + mRightStep; self.Height := H + mHeightStep; //Neue Position der PictureBox ermitteln. Alte wurde verändert GetWindowRect(picFormResize.Handle, mPBRec); //Cursor Position setzen auf die mitte der PicBox //damit nicht die nächste abfrage ausgelößt wird SetCursorPos(mPBRec.Left + ((mPBRec.Right - mPBRec.Left) div 2) - 3, mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3 ); exit; end; If (POINT.x <= mPBRec.left) And (POINT.y <= mPBRec.top) Then begin //Standart weite erzwingen wenn Formweite unter 4125 If w < 275 Then w := 275; //Standart höhe erzwingen wenn Formhöhe unter 1740 If h < 116 Then h := 116; self.left := L; self.top := T; self.Width := W - mRightStep; self.Height := H - mHeightStep; //Neue Position der PictureBox ermitteln. Alte wurde verändert GetWindowRect(picFormResize.Handle, mPBRec); //Cursor Position setzen auf die mitte der PicBox //damit nicht die nächste abfrage ausgelößt wird SetCursorPos( mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3, mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3); exit; end; //******* Form Schrittweise nach Rechts verschieben abhängig von der Cursor Position ******* If (POINT.x >= (mPBRec.left + (mPBRec.Right - mPBRec.left))) Then begin self.left := L; self.top := T; self.Width := W + mRightStep; self.Height := H; //Neue Position der PictureBox ermitteln. Alte wurde verändert GetWindowRect(picFormResize.Handle, mPBRec); //Cursor Position setzen auf die mitte der PicBox //damit nicht die nächste abfrage ausgelößt wird SetCursorPos( mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3, mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3); //******* Form Schrittweise nach Unten verschieben abhängig von der Cursor Position ******* end else If (POINT.y >= (mPBRec.tOp + (mPBRec.Bottom - mPBRec.tOp))) Then begin self.left := L; self.top := T; self.Width := W; self.Height := H + mHeightStep; //Neue Position der PictureBox ermitteln. Alte wurde verändert GetWindowRect(picFormResize.Handle, mPBRec); //Cursor Position setzen auf die mitte der PicBox //damit nicht die nächste abfrage ausgelößt wird SetCursorPos(mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3, mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3); //******* Form Schrittweise nach Links verschieben abhängig von der Cursor Position ******* end else If (POINT.x <= (mPBRec.Right + (mPBRec.left - mPBRec.Right) - 6)) Then begin //Standart weite erzwingen wenn Formweite unter 4125 If w < 275 Then w := 275; self.left := L; self.top := T; self.Width := W - mRightStep; self.Height := H; //Neue Position der PictureBox ermitteln. Alte wurde verändert GetWindowRect(picFormResize.Handle, mPBRec); //Cursor Position setzen auf die mitte der PicBox //damit nicht die nächste abfrage ausgelößt wird SetCursorPos(mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3, mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3); //******* Form Schrittweise nach Oben verschieben abhängig von der Cursor Position ******* end else If (POINT.y <= (mPBRec.Bottom + (mPBRec.Top - mPBRec.Bottom)) - 6) Then begin //Standart höhe erzwingen wenn Formhöhe unter 1740 If h < 116 Then h := 116; self.left := L; self.top := T; self.Width := W ; self.Height := H - mHeightStep; //Neue Position der PictureBox ermitteln. Alte wurde verändert GetWindowRect(picFormResize.Handle, mPBRec); //Cursor Position setzen auf die mitte der PicBox //damit nicht die nächste abfrage ausgelößt wird SetCursorPos(mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3, mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3); end; end; end; procedure Tfrm_Gen.picFormResizeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin If mDrag Then mDrag := False; end; Was ist anders an canvas.handle gegenüber TPanel.handle. Gibt es eine möglichkeit das trotzdem noch auf diese art zu händeln ? Die Maus wird innerhalb vom Record TPanel gehalten mit SetCursorPos damit beim verschieben diese nicht irgendwo auf dem Desktop langschliert. gruss Emil |
Re: Control mit handle
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
es sollte doch kein Problem sein, das onPait Ereignis für das Panel nachzurüsten(siehe Anhang). Alles dafür notwendige inklusive TCanvas, ist ja schon in der Basisklasse vorhanden. |
Re: Control mit handle
Zitat:
Ich hole das Bitmap aus einem Bild in Bild und zeichne es dann mit BitBlt auf das Image(normal Fall) aber das geht wie gesagt mit dem TPanel nicht. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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