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

Вниз

как отловить необходимость погасить кнопку в ячейке 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
6-1273560246
YurikGL
2010-05-11 10:44
2017.11.12
Модуль Whois, определение города и оператора связи по ip-ку.


1-1354822431
Pcrepair
2012-12-06 23:33
2017.11.12
Две версии Функции. что выбрать?


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


2-1450086211
TheEd
2015-12-14 12:43
2017.11.12
как отловить необходимость погасить кнопку в ячейке StringGrid


2-1450085380
gedevan
2015-12-14 12:29
2017.11.12
Как экспортировать или импортировать таблицу из базы Access





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский