Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.02.08;
Скачать: CL | DM;

Вниз

найти контрол   Найти похожие ветки 

 
Dy1   (2009-11-04 19:15) [0]

на форме панели, на них по несколько контролов, нужно найти панель под курсором.
Контрол под курсором вероятно form.ControlAtPos(form.Position);
Вопрос: как узнать панель это или, например, метка на этой панели?
Теги использовать нежелательно - заняты.


 
Jon ©   (2009-11-04 20:05) [1]

label.parent ?


 
Dy1   (2009-11-04 21:18) [2]

а как узнать, что кликнули на label, а не на её панели?


 
Jon ©   (2009-11-04 21:59) [3]

I hope that I understand you correctly:


program Test;

uses
 Windows, KOL;

var
 Panel, Label1, Label2: PControl;

procedure DoClick(Dummy: Pointer; Sender: PObj);
begin
 if PControl(Sender).Parent = Panel then
   ShowMsg("Child:"+PControl(Sender).Caption,MB_OK)
 else
   ShowMsg("Panel",MB_OK)
end;

begin
 Applet := NewForm(nil,"Test").SetClientSize(120,120);
 Panel := NewPanel(Applet,esRaised).SetAlign(caClient).SetBorder(20);
 Label1 := NewLabel(Panel,"LABEL1");
 Label2 := NewLabel(Panel,"LABEL2").PlaceDown;
 Label1.Color := clRed;
 Label2.Color := clRed;
 Panel.OnClick := TOnEvent(MakeMethod(nil,@DoClick));
 Label1.OnClick := TOnEvent(MakeMethod(nil,@DoClick));
 Label2.OnClick := TOnEvent(MakeMethod(nil,@DoClick));
 Run(Applet);
end.


 
Dy1   (2009-11-04 22:24) [4]

интересно что делает IsControl :)

MCK
procedure TForm1.PopMenuNDelMenu(Sender: PMenu; Item: Integer);
var
 cp: TPoint;
begin
 windows.GetCursorPos(cp);
 windows.ScreenToClient(Form1.Form.GetWindowHandle, cp);
 if Form.ControlAtPos(cp.X, cp.Y, ???) ??? then
end;


 
MTsv DN   (2009-11-05 13:07) [5]

USE_NAMES и по имени. Лично я использую префиксы (так сложилось): lbl, pnl, btn, tv, lv и т.д.


 
Vladimir Kladov ©   (2009-11-05 16:59) [6]

Или Tag.


 
Dy1   (2009-11-05 19:27) [7]

с {$DEFINE USE_NAMES} появляется 20 Identifier redeclared: "Name" в KOLEdb. Куда смотреть?


 
MTsv DN   (2009-11-05 21:11) [8]

Смотри в код...


 
Dy1   (2009-11-05 22:37) [9]

все 20 указывают на строки вида "var I: Integer;", в этом модуле дефайнов нет. Я не понимаю что и где не так


 
MTsv DN   (2009-11-05 23:27) [10]

> с {$DEFINE USE_NAMES} появляется 20 Identifier redeclared: "Name" в KOLEdb. Куда смотреть?
написано же "редикларейтед "Name"". Значит в KOLEdb тоже есть "Name". Переименуй его в объекте и во всем коде. Это же основы ООП...Наследование?


 
MTsv DN   (2009-11-05 23:29) [11]

Там вообще везде одни Nam"ы...вот это и правь...


 
Dy1   (2009-11-06 21:36) [12]

в kol.pas примерно на 36200 строчке есть ф-я:
function TControl.ControlAtPos( X, Y: Integer; IgnoreDisabled: Boolean ): PControl;
var I: Integer;
   C: PControl;
   CR, VR: TRect;
begin
  Result := nil;
  CR := ControlRect;
  if Windowed then
     CR := MakeRect( 0, 0, 0, 0 );
  X := X + CR.Left; // - R.Left;
  Y := Y + CR.Top; // - R.Top;
  for I := ChildCount { + MembersCount } - 1 downto 0 do
  begin
     C := Children[ I ]; //Members[ I ];
     if C.Visible then
     if (not IgnoreDisabled) or IgnoreDisabled and C.Enabled then
     begin
        VR := C.ControlRect;
        if (X >= VR.Left) and (X < VR.Right) and
           (Y >= VR.Top) and (Y < VR.Bottom) then
        begin
           Result := C;
           Exit;
        end;
     end;
  end;
end;

что там делает (not IgnoreDisabled) or IgnoreDisabled? Если нужно что-то одно, то что?


 
Dy1   (2009-11-06 22:52) [13]

свойство Name всегда пустое



Страницы: 1 вся ветка

Текущий архив: 2015.02.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.003 c
15-1404312348
Minsk_City
2014-07-02 18:45
2015.02.08
Плагин для Notepad++ (форматтер кода)


3-1301317961
ssnakess
2011-03-28 17:12
2015.02.08
FireBird многофайловая БД


11-1257351348
Dy1
2009-11-04 19:15
2015.02.08
найти контрол


15-1404339127
alexdn
2014-07-03 02:12
2015.02.08
Расстояние до источника эл-магн излучения


2-1389092311
Jimmy
2014-01-07 14:58
2015.02.08
TNT компоненты