На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Как сделать показ rbg когда объект выходит за границу угла?
    До сих пор ищу подходящий вариант работы с пикселями и при тестировании кода на html5 обнаружила, что когда объект выходит за верхний угол то getImageData выдает результат rbg квадрата.
    Чтобы вывести это я использовала строку.
    Цитата

    document.getElementById("debug").value=ctx.getImageData(0, 0, 1, 1).data;

    Пример ниже.
    user posted image
    Как тоже самое сделать на delphi7, чтобы сравнивалось по пикселям и когда объект уходил за границу, а точнее за верхний левый угол то выводилось RGB объекта например в компоненте Label1? Вот код перетаскивания объекта мышкой.
    ExpandedWrap disabled
      unit Unit1;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, StdCtrls, ExtCtrls, AppEvnts;
       
      type
        TForm1 = class(TForm)
          Button1: TButton;
          Timer1: TTimer;
          ListBox1: TListBox;
          Label1: TLabel;
          Label2: TLabel;
          ApplicationEvents1: TApplicationEvents;
          Label3: TLabel;
          procedure Timer1Timer(Sender: TObject);
          procedure FormKeyUp(Sender: TObject; var Key: Word;
            Shift: TShiftState);
          procedure ListBox1KeyDown(Sender: TObject; var Key: Word;
            Shift: TShiftState);
          procedure ApplicationEvents1Message(var Msg: tagMSG;
            var Handled: Boolean);
        private
          { Private declarations }
        public
          { Public declarations }
        end;
       
      var
        Form1: TForm;
        rightb, leftb, upb, downb : Boolean;
        Map_X, Map_Y  : integer;
        OldX, OldY : integer;
       
        dragok:Integer;
        StartX:Integer;
        StartY:Integer;
      implementation
       
      {$R *.dfm}
       
      procedure TForm1.Timer1Timer(Sender: TObject);
       
      begin
        
        if rightb = true then
        begin
           Map_X := Map_X + 2;
        end;
        if leftb = true then
        begin
           Map_X := Map_X - 2;
        end;
        if upb = true then
        begin
            Map_Y := Map_Y - 2;
        end;
        if downb = true then
        begin
            Map_Y := Map_Y + 2;
        end;
       
      OldX := 0;
      OldY := 0;
      Form1.Canvas.Brush.Color:=clWhite;
      Form1.Canvas.FillRect(Form1.ClientRect);
       
      Canvas.Rectangle(100, 100, 150, 150);
      Canvas.Rectangle(200, 200, 250, 250);
      Canvas.Brush.Color:=clRed;
      Canvas.Rectangle(OldX+50+Map_X, OldX+50+Map_Y, OldY+100+Map_X, OldY+100+Map_Y);
       
      end;
       
      procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
        Shift: TShiftState);
      begin
      case Key of
      vk_RIGHT: rightb := false;
      vk_LEFT: leftb := false;
      vk_UP: upb := false;
      vk_DOWN: downb := false;
      end;
      end;
       
      procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
        Shift: TShiftState);
      begin
       
      case key of vk_RIGHT: rightb := true;
      vk_LEFT: leftb := true;
      vk_UP: upb := true;
      vk_DOWN: downb := true;
      end;
      end;
       
      procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
        var Handled: Boolean);
        var
         dx,dy:Integer;
         P : TPoint;
      begin
          
          if Msg.message = WM_LBUTTONDOWN then
          begin
             P:=Form1.ScreenToClient(Mouse.CursorPos);
            
             if (OldX+50+Map_X < P.X) and (OldX+100+Map_X > P.X) and (OldY+50+Map_Y < P.Y) and (OldY+100+Map_Y > P.Y)
             then
             begin
              dragok:=1;
              StartX:=P.X;
              StartY:=P.Y;
             end;
       
          end;
       
          if Msg.message = WM_LBUTTONUP then
          begin
              dragok:=2;
          end;
          if Msg.message = WM_MOUSEMOVE then
          begin
              P:=Form1.ScreenToClient(Mouse.CursorPos);
              dx:=P.X-startX;
              dy:=P.Y-startY;
              if dragok=1 then
              begin
                 Map_X:=Map_X+dx;
                 Map_Y:=Map_Y+dy;
              end;
              startX:=P.X;
              startY:=P.Y;
          end;
       
      end;
       
      end.

    P.S. Код на HTML5.
    Цитата


    var canvas=document.getElementById("canvas");
    console.log(canvas);
    var ctx=canvas.getContext("2d");
    var BB=canvas.getBoundingClientRect();
    var offsetX=BB.left;
    var offsetY=BB.top;
    var WIDTH = canvas.width;
    var HEIGHT = canvas.height;


    var dragok = false;
    var startX;
    var startY;


    var shapes=[];

    shapes.push({x:10,y:100,width:30,height:30,fill:"#444444",isDragging:false});
    shapes.push({x:80,y:100,width:30,height:30,fill:"#ff550d",isDragging:false});

    shapes.push({x:150,y:100,r:10,fill:"#800080",isDragging:false});
    shapes.push({x:200,y:100,r:10,fill:"#0c64e8",isDragging:false});


    canvas.onmousedown = myDown;
    canvas.onmouseup = myUp;
    canvas.onmousemove = myMove;


    draw();


    function rect® {
    ctx.fillStyle=r.fill;
    ctx.fillRect(r.x,r.y,r.width,r.height);
    }


    function circle© {
    ctx.fillStyle=c.fill;
    ctx.beginPath();
    ctx.arc(c.x,c.y,c.r,0,Math.PI*2);
    ctx.closePath();
    ctx.fill();
    }


    function clear() {
    ctx.clearRect(0, 0, WIDTH, HEIGHT);
    }


    function draw() {
    clear();

    for(var i=0;i<shapes.length;i++){

    if(shapes[i].width){
    rect(shapes[i]);
    }else{
    circle(shapes[i]);
    };
    }
    document.getElementById("debug").value=ctx.getImageData(0, 0, 1, 1).data;

    }



    function myDown(e){


    e.preventDefault();
    e.stopPropagation();


    var mx=parseInt(e.clientX-offsetX);
    var my=parseInt(e.clientY-offsetY);


    dragok=false;
    for(var i=0;i<shapes.length;i++){
    var s=shapes[i];

    if(s.width){

    if(mx>s.x && mx<s.x+s.width && my>s.y && my<s.y+s.height){

    dragok=true;
    s.isDragging=true;
    }
    }else{
    var dx=s.x-mx;
    var dy=s.y-my;

    if(dx*dx+dy*dy<s.r*s.r){
    dragok=true;
    s.isDragging=true;
    }
    }
    }

    startX=mx;
    startY=my;
    }



    function myUp(e){

    e.preventDefault();
    e.stopPropagation();


    dragok = false;
    for(var i=0;i<shapes.length;i++){
    shapes[i].isDragging=false;
    }
    }



    function myMove(e){

    if (dragok){


    e.preventDefault();
    e.stopPropagation();


    var mx=parseInt(e.clientX-offsetX);
    var my=parseInt(e.clientY-offsetY);


    var dx=mx-startX;
    var dy=my-startY;


    for(var i=0;i<shapes.length;i++){
    var s=shapes[i];
    if(s.isDragging){
    s.x+=dx;
    s.y+=dy;
    }
    }


    draw();


    startX=mx;
    startY=my;

    }
    }
      Можно вот так
      ExpandedWrap disabled
        procedure TForm1.Timer1Timer(Sender: TObject);
        var
          aColor: TColor;
        begin
         
          if rightb = true then
          begin
             Map_X := Map_X + 2;
          end;
          if leftb = true then
          begin
             Map_X := Map_X - 2;
          end;
          if upb = true then
          begin
              Map_Y := Map_Y - 2;
          end;
          if downb = true then
          begin
              Map_Y := Map_Y + 2;
          end;
         
        OldX := 0;
        OldY := 0;
        Form1.Canvas.Brush.Color:=clWhite;
        Form1.Canvas.FillRect(Form1.ClientRect);
         
        Canvas.Rectangle(100, 100, 150, 150);
        Canvas.Rectangle(200, 200, 250, 250);
        Canvas.Brush.Color:=clRed;
        Canvas.Rectangle(OldX+50+Map_X, OldX+50+Map_Y, OldY+100+Map_X, OldY+100+Map_Y);
        if (OldX+50+Map_X < 0) and (0 <= OldY+100+Map_X) and (OldX+50+Map_Y < 0) and (0 <= OldY+100+Map_Y) then begin
          aColor := Form1.Canvas.Pixels[0, 0];
          Caption := Format('%d.%d.%d', [LoByte(LoWord(aColor)), HiByte(LoWord(aColor)), LoByte(HiWord(aColor))]);
        end else Caption := 'Form1';
        end;
        Спасибо за помощь. Пригодиться при создании столкновения объектов.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0216 ]   [ 16 queries used ]   [ Generated: 27.04.24, 12:42 GMT ]