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

Вниз

как отловить необходимость погасить кнопку в ячейке StringGrid   Найти похожие ветки 

 
TheEd   (2015-12-14 12:43) [0]

Уважаемые мастера, что-то совсем туплю:
  Есть СирингГрид, по SelectCell располагаю кнопку с тремя точками для возможности вызвать свой редактор в нужном месте. Так вот, надо бы погасить её, когда клик происходит вне грида или на ячейках, которые нередактируемые. Со вторым справился, а вот выловить первое пытался через OnExit.
 Он срабатывает только при клике на компоненте, который может иметь фокус. Если к примеру кликнуть на SpeedButton"е, то активным останется грид, и ничего не изменится.
 Есть ли возможность выяснить, что пользователь "ушел" с грида?


 
Кщд ©   (2015-12-14 12:56) [1]

у TStribgGrid событий - штук 30 всего.
неужели сложно открыть документацию и прочитать?


 
sniknik ©   (2015-12-14 13:12) [2]

> на ячейках, которые нередактируемые
у них что не срабатывает SelectCell? в чем проблема проверить на редактируемую или нет ячейку переход?

> выяснить, что пользователь "ушел" с грида
без смены "фокуса"? как? фокус это показатель где "стоит" пользователь.


 
TheEd   (2015-12-15 06:57) [3]


> у TStribgGrid событий - штук 30 всего.
> неужели сложно открыть документацию и прочитать?
>
>

Абсолютно нетрудно. Тем более что из этих 30 могли бы помочь максимум 1-2 (OnExit и криво с таймером через OnMouseOver замутить можно).


> > на ячейках, которые нередактируемые
> у них что не срабатывает SelectCell? в чем проблема проверить
> на редактируемую или нет ячейку переход?

Это то я как раз отрабатываю - тут всё ок. Вопрос был в другом - клик на другом компоненте...


 
TheEd   (2015-12-15 07:07) [4]


> > выяснить, что пользователь "ушел" с грида
> без смены "фокуса"? как? фокус это показатель где "стоит"
> пользователь.
>
>

Сам так думал. Вот пример (создаём пустое приложение, кладём на форму TButton и TSpeedButton):

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons;
type
 TForm1 = class(TForm)
   Button1: TButton;
   SpeedButton1: TSpeedButton;
   procedure Button1Exit(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Exit(Sender: TObject);
begin
 Button1.Caption := "OnExit was just now!";
end;
end.

Форма:

object Form1: TForm1
 Left = 279
 Top = 110
 Width = 222
 Height = 118
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object SpeedButton1: TSpeedButton
   Left = 112
   Top = 24
   Width = 49
   Height = 22
   Caption = "Click me!"
 end
 object Button1: TButton
   Left = 24
   Top = 24
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 0
   OnExit = Button1Exit
 end
end

Так вот, по клику на SpeedButton"не ничего не произойдёт! TButton будет подсвечен и иметь фокус! В мануалах, помнится я встречал - что TSpeedButton не имеет фокуса (не делфийских, а на форумах). И много какие компоненты его не имеют...
Так что печалька :(


 
sniknik ©   (2015-12-15 10:00) [5]

> В мануалах, помнится я встречал
после имени компонента ставишь точку и пытаешься набрать Focused/CanFocus ... есть? значит компонент с фокусом. и посмотри от чего наследуются TButton и TSpeedButton. где определены Focused/CanFocus, узнаешь сразу о всех, без написания примеров.


 
TheEd   (2015-12-15 11:15) [6]

Та ёлки палки, ребята, я это знаю, но вопрос в другом: на форме куча компонентов, не имеющих фокуса и юзверь может кликать и на них...
Соответственно OnExit не сработает. Хук на мышу ставить и проверять где кликонули - это то что пока в голову приходит, но чувствую что кривовато это. Вот поэтому и спрашиваю - кто сталкивался (задача вроде тривиальная - поэтому даже не в компоненты поместил запрос а в "Начинающим") просто дайте толчок мысли, дальше сам догребу :)))


 
sniknik ©   (2015-12-15 11:52) [7]

> Хук на мышу ставить и проверять где кликонули
проще у формы ловить, KeyPreview поставить и ловить.

> чувствую что кривовато это.
как и "задача", не меняя фокус никто никуда не "выходит"...  курсор там остается выделение, и т.д. меняя активность формы (переходя между приложениями) также вернешься не в спидбатон, а в грид (не кликая мышью, а клавишами).
т.е. по логике/система так считает/т.д. ты в нем (гриде) остаешься, а по "задаче" вышел... неувязочка получается.


 
Кщд ©   (2015-12-15 12:42) [8]

>TheEd   (15.12.15 11:15) [6]
Та елки-палки, если хочется, чтобы контрол терял фокус при наступлении события (которое система не считает основанием для смены фокуса), то нужно прописать снятие фокуса при наступлении этого события САМОСТОЯТЕЛЬНО.


 
sniknik ©   (2015-12-15 16:52) [9]

> прописать снятие фокуса
нельзя (ИМХО, насколько помню, проверять не буду). только перенести на что-то другое, причем на что то видимое и позволяющее "фокус".

опять ИМХО, но лучше отказаться от этого нелепого желания (сделать вопреки системе).


 
backuper   (2015-12-15 21:57) [10]


> нельзя (ИМХО, насколько помню, проверять не буду). только
> перенести на что-то другое, причем на что то видимое и позволяющее
> "фокус".

можно, если не понимать буквально смену фокуса, а выполнять код который изначально вешали на смену фокуса.


 
TheEd   (2015-12-16 07:18) [11]

Если вернуться в самое начало, то самоцель не убить фокус, а спрятать кнопку редактирования значения в ячейке грида, когда происходит собитие, даже похожее на уход с грида, например клик на чужом SpeedButtone...
В принципе тему можно закрыть - буду пока хуком обходить ситуацию...

Всем спасибо!


 
Кщд ©   (2015-12-16 13:08) [12]

>sniknik ©   (15.12.15 16:52) [9]
>опять ИМХО, но лучше отказаться от этого нелепого желания (сделать вопреки системе).
без сомненья



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

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

Наверх




Память: 0.5 MB
Время: 0.013 c
1-1355034458
mfender
2012-12-09 10:27
2017.11.12
RTTI. Бесчеловечный AV для некоторых типов


3-1315470203
miau
2011-09-08 12:23
2017.11.12
Блокировка в SQL


15-1466102639
Kerk
2016-06-16 21:43
2017.11.12
Ноутбук с витрины


15-1467495002
Юрий
2016-07-03 00:30
2017.11.12
С днем рождения ! 3 июля 2016 воскресенье


6-1284011253
Alexandro
2010-09-09 09:47
2017.11.12
Как получить доступ к элементу в TWebBrowser?