Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Разместить курсор на середине компонента


Автор: ALeXandrK 9.8.2007, 21:56
Я рисую сначала картинку, а потом ставлю на нее курсор, но получается ерунда...

Рисование картинки:
Код

...
var
     MovingCell:TImage;
...
  MovingCell := TImage.Create(nil);
...
 with MovingCell do
    begin
        Parent := grdTimeTable;  // Картинку хочу разместить посередине TStringGrid
        Width  := grdTimeTable.ColWidths[ACol];         // ------- Размером с ячейку
        Height := grdTimeTable.RowHeights[ARow];    //----------------------------------
        Top := grdTimeTable.Top+(grdTimeTable.Height div 2);  // Координаты местоположения картинки
        Left := grdTimeTable.Left+(grdTimeTable.Width div 2);  // -----------------------------------------------------
      //Устанавливаем курсор на середину
        SetCurCenter(MovingCell);
      //Рисуем
        Canvas.Brush.Color := clBlack;
        Canvas.FillRect(ClientRect);
    end;


Устанавливаем курсор на картинку:
Код

procedure SetCurCenter(Control:TImage);
var point:TPoint;// Для установки координат мыши
begin
  with Control do
  begin
    point.X:=Width div 2;
    point.Y:=Height div 2;
    point := Control.ClientToScreen(point);
  end;
  SetCursorPos(point.x, point.y);
end;


Что самое интересное:
  •  Если запускать все в этом виде, то курсор устанавливается на середину grdTimeTable, 
     а картинка рисуется не там, где ей положено;
  •  Если убрать выполнение проседуры SetCurCenter, то картинка рисуется где нужно,
     ну а курсор, понятное дело, где стоял там и стоит.
У меня Delphi 2007 без Update. 

Где же я напортачил, люди добрые ???smile 

Автор: Telepyz 9.8.2007, 22:20
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    grdTimeTable: TStringGrid;
    SpeedButton1: TSpeedButton;
    Image1: TImage;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SetCurCenter(Control:TImage);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.SetCurCenter(Control:TImage);
var point:TPoint;// Äëÿ óñòàíîâêè êîîðäèíàò ìûøè
begin
  with Control do
  begin
    point.X:=Width div 2;
    point.Y:=Height div 2;
    point := Control.ClientToScreen(point);
  end;
  SetCursorPos(point.x, point.y);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var MovingCell:TImage;
begin
  MovingCell := TImage.Create(nil);
 with MovingCell do
    begin
        Parent := grdTimeTable;  // Êàðòèíêó õî÷ó ðàçìåñòèòü ïîñåðåäèíå TStringGrid
        Width  := grdTimeTable.ColWidths[5];         // ------- Ðàçìåðîì ñ ÿ÷åéêó
        Height := grdTimeTable.RowHeights[5];    //----------------------------------
        Top := grdTimeTable.Top+(grdTimeTable.Height div 2);  // Êîîðäèíàòû ìåñòîïîëîæåíèÿ êàðòèíêè
        Left := grdTimeTable.Left+(grdTimeTable.Width div 2);  // -----------------------------------------------------
      //Óñòàíàâëèâàåì êóðñîð íà ñåðåäèíó
        SetCurCenter(MovingCell);
      //Ðèñóåì
        Canvas.Brush.Color := clBlack;
        Canvas.FillRect(ClientRect);
    end;
end;

end.



Все работает

P.S. у меня Delphi 7

Автор: Sanchezzz 9.8.2007, 22:43
у меня тоже пашет просто 
сделай его в приват.
Код

private
procedure SetCurCenter(Control:TImage);
...
procedure Tform1.SetCurCenter(Control:TImage);
var point:TPoint;// Для установки координат мыши
begin
  with Control do
  begin
    point.X:=Width div 2;
    point.Y:=Height div 2;
    point := Control.ClientToScreen(point);
  end;
  SetCursorPos(point.x, point.y);
end;


Автор: ALeXandrK 9.8.2007, 23:15
Sanchezzz:
Цитата

у меня тоже пашет просто 
сделай его в приват


Да у меня этот метод вообще в одтельный модуль вынесен.

Смех да и только ... создал другое приложение (тестовое) тоже 
туда это все запихнул - работает...
Значит проблема где-то в другом мести smile 

Нашел это место, теперь дело за малым smile  разабраться что за нафиг smile 

Спасибо ребята за отзывчивость smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)