Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Seleccionar parte del escritorio (https://www.clubdelphi.com/foros/showthread.php?t=30970)

Nbull 24-04-2006 20:40:52

Seleccionar parte del escritorio
 
Hola a tod@s, estoy haciendo una aplicación que hace un zoom de la parte seleccionada del escritorio.

Gracias al amigo seoane que me explicó como hacer el zoom en otro hilo, ha sido pan comido, pero, lo que necesito ahora es que cuando se haga click con el ratón y sin soltar este, aparezca un rectángulo como pasa al arrastrar el ratón en el escritorio de windows.

Dandome el Top, Bottom, Right y Left del rectángulo.

Supongo que no sera muy dificil pero estoy muy pez.

Gracias por vuestra ayuda.Un saludo.

seoane 24-04-2006 21:22:17

1 Archivos Adjunto(s)
;) Pues tampoco es tan sencillo. No tanto porque no se pueda dibujar directamente sobre la pantalla, que se puede, el problema es que borrar lo dibujado ya no es tan facil. Tampoco es secillo controlar los movimientos del raton fuera de nuestro formulario.

Por eso muchos programas, cuando tiene que hacer lo que tu quieres usan un pequeño truco, copian toda la pantalla, quitan los bordes de su formulario, lo maximizan y dibujan la copia sobre el. De esta forma aunque parece que se esta haciendo la seleccion directamente sobre la pantalla, se esta realizando sobre su formulario.

Esto reduce muchisimo el problema, aqui te dejo un ejemplo de como lo haria yo, haber que te parece.

Nbull 27-04-2006 00:55:00

Joer seoane eres un crack tio, muchismas gracias, era eso justo lo que necesitaba.Me ha funcionado perfectamente.

Un saludo y gracias de nuevo.;)

kapullok_2006 02-05-2007 11:29:36

poder ver código ejemplo 12.zip
 
Hola seone,no puedo descargarme tu archivo.
Puedes ponerlo escrito en este foro? o enviarme el zip a kapullok_2006@yahoo.es sin no es mucho pedir?


saludos.

seoane 02-05-2007 12:43:44

Cita:

Empezado por kapullok_2006
Hola seone,no puedo descargarme tu archivo.
Puedes ponerlo escrito en este foro? o enviarme el zip a kapullok_2006@yahoo.es sin no es mucho pedir?

:confused: El único archivo que he subido a este hilo es Ejemplo 12.zip, y ya se encuentra alojado en el foro como archivo adjunto. He pulsado sobre el enlace y no tengo problemas para bajarlo ...

seoane 02-05-2007 12:46:37

Aunque he pensado que puede que te encuentres detrás de algún proxy que te impide bajar archivos zip.

En cualquier caso, aquí te dejo el archivo pas que esta dentro del zip:
Código Delphi [-]
unit ufrmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TfrmMain = class(TForm)
    ScrollBox1: TScrollBox;
    imgPantalla: TImage;
    Panel1: TPanel;
    lbTop: TLabel;
    lbLeft: TLabel;
    lbBottom: TLabel;
    lbRight: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure imgPantallaMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure imgPantallaMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
    Seleccion: TRect;
    procedure Seleccionar(R: TRect);
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.Seleccionar(R: TRect);
begin
  imgPantalla.Canvas.Brush.Style:= bsClear;;
  imgPantalla.Canvas.Pen.Style:= psDash;
  imgPantalla.Canvas.Pen.Mode:= pmNot;
  imgPantalla.Canvas.Rectangle(Seleccion);
  imgPantalla.Canvas.Rectangle(R);
  Seleccion:= R;
  if Seleccion.Left > Seleccion.Right then
  begin
    R.Left:= Seleccion.Right;
    R.Right:= Seleccion.Left;
  end;
  if Seleccion.Top > Seleccion.Bottom then
  begin
    R.Top:= Seleccion.Bottom;
    R.Bottom:= Seleccion.Top;
  end;
  if not isRectEmpty(R) then
  begin
    lbTop.Caption:= 'Top = ' + IntToStr(R.Top);
    lbLeft.Caption:= 'Left = ' + IntToStr(R.Left);
    lbBottom.Caption:= 'Bottom = ' + IntToStr(R.Bottom);
    lbRight.Caption:= 'Right = ' + IntToStr(R.Right);
  end else
  begin
    lbTop.Caption:= 'Top = ';
    lbLeft.Caption:= 'Left = ';
    lbBottom.Caption:= 'Bottom = ';
    lbRight.Caption:= 'Right = ';
  end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
var
  bmp: Tbitmap;
begin
  FillChar(Seleccion,SizeOf(Seleccion),0);
  bmp:= Tbitmap.Create;
  try
    try
      bmp.Width:= GetSystemMetrics(SM_CXSCREEN);
      bmp.Height:= GetSystemMetrics(SM_CYSCREEN);
      BitBlt(bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,GetDc(0),0,0,SRCCOPY);
      imgPantalla.Picture.Bitmap.Assign(bmp);
    finally
      bmp.free;
    end;
  except end;
end;

procedure TfrmMain.imgPantallaMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    Seleccionar(Rect(X,Y,X,Y));
end;

procedure TfrmMain.imgPantallaMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    if x < 0 then x:= 0;
    if y < 0 then y:= 0;
    if x > imgPantalla.Width then x:= imgPantalla.Width;
    if y > imgPantalla.Height then y:= imgPantalla.Height;
    Seleccionar(Rect(Seleccion.Left,Seleccion.Top,X,Y));
  end;
end;

end.

kapullok_2006 03-05-2007 12:44:08

gracias
 
gracias Seone,probaré como me va.

Saludos.
:p


La franja horaria es GMT +2. Ahora son las 17:32:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi