Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2015.02.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "KOL";
Текущий архив: 2015.02.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.001 c
2-1389003648
Aleks
2014-01-06 14:20
2015.02.08
Установка начального каталога SelectDirectory


2-1389046385
Signal
2014-01-07 02:13
2015.02.08
Есть ли реальный алгоритм вычисления прямоугольника


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


15-1404377324
xayam
2014-07-03 12:48
2015.02.08
Javascript to Java


15-1404333002
Юрий
2014-07-03 00:30
2015.02.08
С днем рождения ! 3 июля 2014 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский