AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Control mit handle

Ein Thema von EWeiss · begonnen am 9. Apr 2008 · letzter Beitrag vom 9. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Control mit handle

  Alt 9. Apr 2008, 13:03
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Control mit handle

  Alt 9. Apr 2008, 13:05
Jedes von TWinControl abgeleitete Control

Warum machst du das Image zum Parent des Panels?
Markus Kinzler
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Control mit handle

  Alt 9. Apr 2008, 13:20
Zitat von mkinzler:
Jedes von TWinControl abgeleitete Control

Warum machst du das Image zum Parent des Panels?
um auf den Panel ein Picture zu zeichen.

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Control mit handle

  Alt 9. Apr 2008, 13:23
Aber warum das Image als Parent des Panels und nicht umgekehrt?
Markus Kinzler
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Control mit handle

  Alt 9. Apr 2008, 13:27
Zitat von mkinzler:
Aber warum das Image als Parent des Panels und nicht umgekehrt?
Hmm ja dann umgekehrt

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Control mit handle

  Alt 9. Apr 2008, 13:38
TPaintBox
Markus Kinzler
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Control mit handle

  Alt 9. Apr 2008, 13:50
Zitat von mkinzler:
TPaintBox
hmmmm leider nicht!

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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Control mit handle

  Alt 9. Apr 2008, 17:39
Das ist meine Funktion welche den Skin stepweise vergrößert oder verkleinert.

Delphi-Quellcode:
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;
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.
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
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Control mit handle

  Alt 9. Apr 2008, 17:40
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.
Angehängte Dateien
Dateityp: zip panelpaint_744.zip (6,1 KB, 1x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

Re: Control mit handle

  Alt 9. Apr 2008, 17:45
Zitat von bitsetter:
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.
So einfach ist es leider nicht.
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:41 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