Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
titreme -tekrarlayan görüntü
#1
panel taşıma sırasındaki bu tekrarı nasıl yok edebilirim doublebuffer işe yaramadı ,invalidate de işe yaramadı
RvsF1j.jpg
procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
 var
xBool,yBool:boolean;
    i,ust,sol,sag,alt:integer; poss,ps : TPoint;
begin

 if  inReposition then
 begin
   try
 ust:= strtoint(columnlistbox1.ColumnItems[0,0]) ;
 sol:= strtoint(columnlistbox1.ColumnItems[0,1]) ;
 sag:= strtoint(columnlistbox1.ColumnItems[0,2]) ;
 alt:= strtoint(columnlistbox1.ColumnItems[0,3]) ;

    if (yapistiY=false) then
    begin
       with TWinControl(Sender) do
       begin
       GetCursorPos(newPos);
       Screen.Cursor := crSize;
       if (yapistiY=false) then  Top   := Top  - oldPos.Y + newPos.Y;
       if (yapistiX=false) then Left   := Left - oldPos.X + newPos.X;
         poss:=  form1.ClientToScreen(Point(0,0));
         ArroundPsitionTop := (ScreenToClient(poss));
         ArroundPsitionTop.Y:=  abs ( ArroundPsitionTop.Y);

                  if ( ArroundPsitionTop.y < ust +tutamac) and (ArroundPsitionTop.y > ust-tutamac) then
                  begin
                  py:=mouse.CursorPos.y;
                  top:= ust;
                  yapistiY:=true;
                  end;

                  if ( ArroundPsitionTop.y+Height < alt +tutamac) and (ArroundPsitionTop.y+height > alt-tutamac) then
                  begin
                  py:=mouse.CursorPos.y;
                 top:= alt-height;
                  yapistiY:=true;
                  end;

             oldPos := newPos;

       end
    end else
    begin

      with TWinControl(Sender) do
      begin
              GetCursorPos(newPos);

             if ((py>mouse.CursorPos.y +20) or (py<mouse.CursorPos.y -20)) then
             yBool:=true  else yBool:=false;

        if yBool then
        begin
            if  abs(mouse.CursorPos.y-py)>10 then
            begin
            Left   := Left - oldPos.X + newPos.X;
            Top    := Top-newPos.Y+ oldPos.Y +(mouse.CursorPos.y-py) ;
            yapistiY:=false;
            end;
        end else
        begin

           if yapistiY then
              if not yapistiX then
              Left  := Left  - oldPos.X + newPos.X;
        end;

        oldPos := newPos;
      end;
    end;

    if (yapistiX=false) then
    begin
       with TWinControl(Sender) do
       begin

       //caption:=inttostr(Left)+'  '+inttostr(oldPos.X + newPos.X);

       GetCursorPos(newPos);
       Screen.Cursor := crSize;
       if (yapistiY=false) then  Top   := Top  - oldPos.Y + newPos.Y;
       if (yapistiX=false) then Left   := Left - oldPos.X + newPos.X;
             poss:=  form1.ClientToScreen(Point(0,0));
         ArroundPsitionTop := (ScreenToClient(poss));
         ArroundPsitionTop.x:=  abs ( ArroundPsitionTop.x);

                    if ( ArroundPsitionTop.x < sol +tutamac) and (ArroundPsitionTop.x > sol-tutamac) then
                    begin
                    px:=mouse.CursorPos.x;
                    left:= sol;
                    yapistiX:=true;
                    end;

                    if ( ArroundPsitionTop.x < sag +tutamac) and (ArroundPsitionTop.x > sag-tutamac) then
                    begin
                    px:=mouse.CursorPos.x;
                    left:= sag;
                    yapistiX:=true;
                    end;
              oldPos := newPos;
       end;
     end else
     begin
       with TWinControl(Sender) do
       begin
             GetCursorPos(newPos);
         if ((px>mouse.CursorPos.x +20) or (px<mouse.CursorPos.x -20)) then
         xBool:=true  else xBool:=false;
            if xBool then
            begin
                if  abs(mouse.CursorPos.x-px)>10 then
                begin
                Left   := Left - oldPos.X + newPos.X +(mouse.CursorPos.x-px);
                Top    := Top-newPos.Y+ oldPos.Y;
                yapistiX:=false;
                end;
            end else
            begin

               if yapistiX then
               if not yapistiY then
                  Top  := Top-newPos.Y+ oldPos.Y ;
            end;
               oldPos := newPos;
       end;
     end;


   finally
     PositionNodes(TWinControl(Sender));
   end;
  end;
end;
Cevapla
#2
(08-12-2019, Saat: 09:47)info@guzelceker.com Adlı Kullanıcıdan Alıntı: panel taşıma sırasındaki bu tekrarı nasıl yok edebilirim doublebuffer işe yaramadı ,invalidate de işe yaramadı
RvsF1j.jpg
procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
 var
xBool,yBool:boolean;
    i,ust,sol,sag,alt:integer; poss,ps : TPoint;
begin

 if  inReposition then
 begin
   try
 ust:= strtoint(columnlistbox1.ColumnItems[0,0]) ;
 sol:= strtoint(columnlistbox1.ColumnItems[0,1]) ;
 sag:= strtoint(columnlistbox1.ColumnItems[0,2]) ;
 alt:= strtoint(columnlistbox1.ColumnItems[0,3]) ;

    if (yapistiY=false) then
    begin
       with TWinControl(Sender) do
       begin
       GetCursorPos(newPos);
       Screen.Cursor := crSize;
       if (yapistiY=false) then  Top   := Top  - oldPos.Y + newPos.Y;
       if (yapistiX=false) then Left   := Left - oldPos.X + newPos.X;
         poss:=  form1.ClientToScreen(Point(0,0));
         ArroundPsitionTop := (ScreenToClient(poss));
         ArroundPsitionTop.Y:=  abs ( ArroundPsitionTop.Y);

                  if ( ArroundPsitionTop.y < ust +tutamac) and (ArroundPsitionTop.y > ust-tutamac) then
                  begin
                  py:=mouse.CursorPos.y;
                  top:= ust;
                  yapistiY:=true;
                  end;

                  if ( ArroundPsitionTop.y+Height < alt +tutamac) and (ArroundPsitionTop.y+height > alt-tutamac) then
                  begin
                  py:=mouse.CursorPos.y;
                 top:= alt-height;
                  yapistiY:=true;
                  end;

             oldPos := newPos;

       end
    end else
    begin

      with TWinControl(Sender) do
      begin
              GetCursorPos(newPos);

             if ((py>mouse.CursorPos.y +20) or (py<mouse.CursorPos.y -20)) then
             yBool:=true  else yBool:=false;

        if yBool then
        begin
            if  abs(mouse.CursorPos.y-py)>10 then
            begin
            Left   := Left - oldPos.X + newPos.X;
            Top    := Top-newPos.Y+ oldPos.Y +(mouse.CursorPos.y-py) ;
            yapistiY:=false;
            end;
        end else
        begin

           if yapistiY then
              if not yapistiX then
              Left  := Left  - oldPos.X + newPos.X;
        end;

        oldPos := newPos;
      end;
    end;

    if (yapistiX=false) then
    begin
       with TWinControl(Sender) do
       begin

       //caption:=inttostr(Left)+'  '+inttostr(oldPos.X + newPos.X);

       GetCursorPos(newPos);
       Screen.Cursor := crSize;
       if (yapistiY=false) then  Top   := Top  - oldPos.Y + newPos.Y;
       if (yapistiX=false) then Left   := Left - oldPos.X + newPos.X;
             poss:=  form1.ClientToScreen(Point(0,0));
         ArroundPsitionTop := (ScreenToClient(poss));
         ArroundPsitionTop.x:=  abs ( ArroundPsitionTop.x);

                    if ( ArroundPsitionTop.x < sol +tutamac) and (ArroundPsitionTop.x > sol-tutamac) then
                    begin
                    px:=mouse.CursorPos.x;
                    left:= sol;
                    yapistiX:=true;
                    end;

                    if ( ArroundPsitionTop.x < sag +tutamac) and (ArroundPsitionTop.x > sag-tutamac) then
                    begin
                    px:=mouse.CursorPos.x;
                    left:= sag;
                    yapistiX:=true;
                    end;
              oldPos := newPos;
       end;
     end else
     begin
       with TWinControl(Sender) do
       begin
             GetCursorPos(newPos);
         if ((px>mouse.CursorPos.x +20) or (px<mouse.CursorPos.x -20)) then
         xBool:=true  else xBool:=false;
            if xBool then
            begin
                if  abs(mouse.CursorPos.x-px)>10 then
                begin
                Left   := Left - oldPos.X + newPos.X +(mouse.CursorPos.x-px);
                Top    := Top-newPos.Y+ oldPos.Y;
                yapistiX:=false;
                end;
            end else
            begin

               if yapistiX then
               if not yapistiY then
                  Top  := Top-newPos.Y+ oldPos.Y ;
            end;
               oldPos := newPos;
       end;
     end;


   finally
     PositionNodes(TWinControl(Sender));
   end;
  end;
end;

Maksat paneli taşımak ise; bu durumda interposer class tekniğinden istifade edebilirsiniz. Aşağıdaki yöntemi bir deneyin:

unit Unit3;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
 TPanel = class(Vcl.ExtCtrls.TPanel)
 protected
   procedure WMNcHitTest(var Message : TMessage); message WM_NCHITTEST;
 end;

 TForm3 = class(TForm)
   Panel1: TPanel;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form3: TForm3;

implementation

{$R *.dfm}

{ TPanel }

procedure TPanel.WMNcHitTest(var Message: TMessage);
begin
 inherited;

 Message.Result := HTCAPTION;
end;

end.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
(09-12-2019, Saat: 09:04)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(08-12-2019, Saat: 09:47)info@guzelceker.com Adlı Kullanıcıdan Alıntı: panel taşıma sırasındaki bu tekrarı nasıl yok edebilirim doublebuffer işe yaramadı ,invalidate de işe yaramadı
RvsF1j.jpg
procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
 var
xBool,yBool:boolean;
    i,ust,sol,sag,alt:integer; poss,ps : TPoint;
begin

 if  inReposition then
 begin
   try
 ust:= strtoint(columnlistbox1.ColumnItems[0,0]) ;
 sol:= strtoint(columnlistbox1.ColumnItems[0,1]) ;
 sag:= strtoint(columnlistbox1.ColumnItems[0,2]) ;
 alt:= strtoint(columnlistbox1.ColumnItems[0,3]) ;

    if (yapistiY=false) then
    begin
       with TWinControl(Sender) do
       begin
       GetCursorPos(newPos);
       Screen.Cursor := crSize;
       if (yapistiY=false) then  Top   := Top  - oldPos.Y + newPos.Y;
       if (yapistiX=false) then Left   := Left - oldPos.X + newPos.X;
         poss:=  form1.ClientToScreen(Point(0,0));
         ArroundPsitionTop := (ScreenToClient(poss));
         ArroundPsitionTop.Y:=  abs ( ArroundPsitionTop.Y);

                  if ( ArroundPsitionTop.y < ust +tutamac) and (ArroundPsitionTop.y > ust-tutamac) then
                  begin
                  py:=mouse.CursorPos.y;
                  top:= ust;
                  yapistiY:=true;
                  end;

                  if ( ArroundPsitionTop.y+Height < alt +tutamac) and (ArroundPsitionTop.y+height > alt-tutamac) then
                  begin
                  py:=mouse.CursorPos.y;
                 top:= alt-height;
                  yapistiY:=true;
                  end;

             oldPos := newPos;

       end
    end else
    begin

      with TWinControl(Sender) do
      begin
              GetCursorPos(newPos);

             if ((py>mouse.CursorPos.y +20) or (py<mouse.CursorPos.y -20)) then
             yBool:=true  else yBool:=false;

        if yBool then
        begin
            if  abs(mouse.CursorPos.y-py)>10 then
            begin
            Left   := Left - oldPos.X + newPos.X;
            Top    := Top-newPos.Y+ oldPos.Y +(mouse.CursorPos.y-py) ;
            yapistiY:=false;
            end;
        end else
        begin

           if yapistiY then
              if not yapistiX then
              Left  := Left  - oldPos.X + newPos.X;
        end;

        oldPos := newPos;
      end;
    end;

    if (yapistiX=false) then
    begin
       with TWinControl(Sender) do
       begin

       //caption:=inttostr(Left)+'  '+inttostr(oldPos.X + newPos.X);

       GetCursorPos(newPos);
       Screen.Cursor := crSize;
       if (yapistiY=false) then  Top   := Top  - oldPos.Y + newPos.Y;
       if (yapistiX=false) then Left   := Left - oldPos.X + newPos.X;
             poss:=  form1.ClientToScreen(Point(0,0));
         ArroundPsitionTop := (ScreenToClient(poss));
         ArroundPsitionTop.x:=  abs ( ArroundPsitionTop.x);

                    if ( ArroundPsitionTop.x < sol +tutamac) and (ArroundPsitionTop.x > sol-tutamac) then
                    begin
                    px:=mouse.CursorPos.x;
                    left:= sol;
                    yapistiX:=true;
                    end;

                    if ( ArroundPsitionTop.x < sag +tutamac) and (ArroundPsitionTop.x > sag-tutamac) then
                    begin
                    px:=mouse.CursorPos.x;
                    left:= sag;
                    yapistiX:=true;
                    end;
              oldPos := newPos;
       end;
     end else
     begin
       with TWinControl(Sender) do
       begin
             GetCursorPos(newPos);
         if ((px>mouse.CursorPos.x +20) or (px<mouse.CursorPos.x -20)) then
         xBool:=true  else xBool:=false;
            if xBool then
            begin
                if  abs(mouse.CursorPos.x-px)>10 then
                begin
                Left   := Left - oldPos.X + newPos.X +(mouse.CursorPos.x-px);
                Top    := Top-newPos.Y+ oldPos.Y;
                yapistiX:=false;
                end;
            end else
            begin

               if yapistiX then
               if not yapistiY then
                  Top  := Top-newPos.Y+ oldPos.Y ;
            end;
               oldPos := newPos;
       end;
     end;


   finally
     PositionNodes(TWinControl(Sender));
   end;
  end;
end;

Maksat paneli taşımak ise; bu durumda interposer class tekniğinden istifade edebilirsiniz. Aşağıdaki yöntemi bir deneyin:

unit Unit3;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
 TPanel = class(Vcl.ExtCtrls.TPanel)
 protected
   procedure WMNcHitTest(var Message : TMessage); message WM_NCHITTEST;
 end;

 TForm3 = class(TForm)
   Panel1: TPanel;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form3: TForm3;

implementation

{$R *.dfm}

{ TPanel }

procedure TPanel.WMNcHitTest(var Message: TMessage);
begin
 inherited;

 Message.Result := HTCAPTION;
end;

end.

hocam bu olmuyor sadece panel değil tutamaçları group halinde taşımam ve onla birlikte panelide taşımam gerekiyor aynı zamanda resize işlemleride var
Cevapla
#4
Aşağıdaki linkte benzer bir konu anlatılmış, oradaki örneği inceleyerek amacınıza ulaşabilirsiniz.

https://neftali.clubdelphi.com/component...onruntime/
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#5
tşkler 
sorunum çözüldü sorun> SetWindowRgn ile oluşturduğum çizgilerden kaynaklanıyormuş update işlemi sonrası düzeldi...
Cevapla
#6
aşırı titremeyi update ile aldım ancak yine minumun düzeyde titriyor... titreme sebebi anapaneli boyutlandırdıktan sonra  positionnodes ile tutamaçları yeniden boyutllandırmam..... 
aşağıdaki kodu nasıl kısaltabilirim 

procedure TForm1.PositionNodes(AroundControl: TWinControl);
var
    Node : Integer;
    T    : Integer;
    L    : Integer;
    CT   : Integer;
    CL   : Integer;
    FR   : Integer;
    FB   : Integer;
    FT   : Integer;
    FL   : Integer;

    TopLeft: TPoint;
begin
//invalidate;


  FCurrentNodeControl := nil;
  with AroundControl do
  begin
              CL := (Width  div 2) + Left -TPanel(FNodes[0]).Width div 2;
              CT := (Height div 2) + Top  -TPanel(FNodes[0]).Width div 2;
              FR := Left + Width  - TPanel(FNodes[0]).Width div 2;
              FB := Top  + Height - TPanel(FNodes[0]).Width div 2;
              FT := Top  - TPanel(FNodes[0]).Width div 2;
              FL := Left - TPanel(FNodes[0]).Width div 2;
  end;

    for  Node := 0 to 12 do
    begin
        with AroundControl do
         begin

              case Node of
                0: begin
                     T := FT;
                     L := FL;
                   end;
                1: begin
                     T := FT;
                     L := CL;
                   end;
                2: begin
                     T := FT;
                     L := FR;
                   end;
                3: begin
                     T := CT;
                     L := FR;
                   end;
                4: begin
                     T := FB;
                     L := FR;
                   end;
                5: begin
                     T := FB;
                     L := CL;
                   end;
                6: begin
                     T := FB;
                     L := FL;
                   end;
                7: begin
                     T := CT;
                     L := FL;
                   end;
                8: begin
                     T := Top  - TutamacMoveBoy div 2;//14/2
                     L := FR-TutamacMoveUzaklik;//default 36

                   end;
              9: begin
                     T := Top-TPanel(FNodes[Node]).Height;
                     L := left;
                   end;
                10: begin
                     T := Top;
                     L := Left + Width;
                   end;
                11: begin
                     T := Top  + Height;
                     L := left;
                   end;
                12: begin
                     T := Top;
                     L := Left-TPanel(FNodes[Node]).Width;
                   end;

                else
                  T := 0;
                  L := 0;
              end;

           TopLeft := Parent.ClientToScreen(Point(L,T));
         end;

         with TPanel(FNodes[Node]) do
         begin
              TopLeft := Parent.ScreenToClient(TopLeft);
              Top     := TopLeft.Y;
              Left    := TopLeft.X;

              case Node of
               9: Width    := AroundControl.Width;
              10: height   := AroundControl.height;
              11: Width    := AroundControl.Width;
              12: height   := AroundControl.height;
              end;
            BringToFront;
            end;

    end;

    FCurrentNodeControl := AroundControl;

    if FCurrentNodeControl.Width<100 then
    TWinControl(FNodes.Items[8]).Visible:=false;

    form1.IzgaraPanel1.Update;

end;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  HDMI'den görüntü ve ses alma Yeliz 5 1.293 13-02-2019, Saat: 21:56
Son Yorum: ahmetb
  OpenCV goruntu isleme arsl01 20 3.960 28-10-2018, Saat: 10:10
Son Yorum: Fesih ARSLAN
  Delphi ile görüntü işleme narkotik 25 6.099 12-06-2018, Saat: 19:30
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi