Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / RadioGroup запрос перед клик? / 13 сообщений из 13, страница 1 из 1
13.03.2018, 09:49
    #39613929
verve
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Можно ли сделать запрос на изменение на клик и в случае отмены ничего не делать. Чтобы точка не перескакивала.
...
Рейтинг: 0 / 0
13.03.2018, 11:08
    #39613982
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
verve,

можно, разрешаю :)

зы. попробуй запомнить предыдущий ItemIndex, если условие не выполнится, то верни все взад
...
Рейтинг: 0 / 0
13.03.2018, 11:26
    #39614003
verve
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Док, к сожалению, нужно, чтобы ItemIndex вообще не изменился... так как вы предлагаете, я сделал.. но это не выход
...
Рейтинг: 0 / 0
13.03.2018, 12:03
    #39614033
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
verveДок, к сожалению, нужно, чтобы ItemIndex вообще не изменился... так как вы предлагаете, я сделал.. но это не выход
Тут программист нужен.
А посему: замени на GroupBox и отдельно туда кинь RadioButton - ы. Там более просто управлять...
...
Рейтинг: 0 / 0
13.03.2018, 14:05
    #39614116
kep-ko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private // TForma
  procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;

procedure TForma.WMCommand(var Message: TWMCommand);
begin
 with Message do
  if (NotifyCode = BN_CLICKED)
   and ((Ctl = RadioButton1.Handle) or (Ctl = RadioButton2.Handle) or (Ctl = RadioButton3.Handle))
    and NoClickTest()
     then Exit;
 inherited;
end;

verve,
...
Рейтинг: 0 / 0
13.03.2018, 14:27
    #39614137
Belotsky Serge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
verveДок, к сожалению, нужно, чтобы ItemIndex вообще не изменился... так как вы предлагаете, я сделал.. но это не выход

А как вы сделали? Это можно сделать в обработчике TRadioGroup.OnClick.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
 with TRadioGroup(Sender)do
   begin
// делаем что надо
// ...
// возвращаем обратно ItemIndex
    OnClick := nil; // для того, чтобы не вызвался OnClick на следующей строке
    ItemIndex := PrevItemIndex;
    OnClick := RadioGroup1Click; // вернуть обратно обработчик
   end;
end;

...
Рейтинг: 0 / 0
13.03.2018, 14:52
    #39614155
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
kep-ko,

проще так (хоть и кода больше)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
  { TForm1 }

  TForm1 = class(TForm)
    ChBox: TCheckBox;
    Label1: TLabel;
    RadioGroup1: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure RadioGroup1SelectionChanged(Sender: TObject);
  private
    FItemIndex: Integer;
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.RadioGroup1SelectionChanged(Sender: TObject);
begin
  if not ChBox.Checked then
  begin
    RadioGroup1.ItemIndex:= FItemIndex;
    Label1.Caption:= 'Opps! You can''t change ItemIndex while property checkbox.checked is not in checked state';
    exit;
  end;

  FItemIndex:= RadioGroup1.ItemIndex;
  Label1.Caption:= 'We''re changing ItemIndex';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ChBox.Checked:= True;
  Label1.Caption:= '';
  FItemIndex:= RadioGroup1.ItemIndex;
  RadioGroup1SelectionChanged(Sender);
end; 




...
Рейтинг: 0 / 0
13.03.2018, 15:42
    #39614179
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Докkep-ko,

проще так (хоть и кода больше)


что такое RadioGroup1SelectionChanged?
...
Рейтинг: 0 / 0
13.03.2018, 15:55
    #39614190
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Tactical Nuclear Penguin,

Метод TRadioGroup в лазарусе
...
Рейтинг: 0 / 0
13.03.2018, 16:02
    #39614194
kep-ko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Док, там упрощённо, не кросcплатформно )) и не отвечает тз. Веселится нужно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
var
 Forma: TForma;
 OldRadio : function (Wnd :HWND; Msg :Cardinal; WParam:WPARAM; LParam:LPARAM):LRESULT; stdcall;

implementation

function NewRadio(Wnd :HWND; Msg :Cardinal; wParam:WPARAM; lParam:LPARAM):LRESULT; stdcall;
var
 item:Integer;
begin
 if Msg = WM_COMMAND then
  if HiWord(wParam) = BN_CLICKED then
   with Forma.RadioGroup1 do
    for item := 0 to Items.Count-1 do
     if lParam = Buttons[item].Handle then
      if Forma.AllowClick(item) then Break else Exit(0);
 Result := OldRadio(Wnd, Msg, wParam, lParam);
end;

procedure TForma.FormCreate(Sender: TObject);
begin
 OldRadio := Pointer(GetWindowLongPtr(RadioGroup1.Handle, GWLP_WNDPROC));
 SetWindowLongPtr(RadioGroup1.Handle, GWLP_WNDPROC, UIntPtr(@NewRadio));
end;

...
Рейтинг: 0 / 0
13.03.2018, 17:17
    #39614265
verve
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Belotsky Serge,
работает, но если свернуть развернуть окно, в какой-то момент времени выскакивает окно при активации и отказ не работает...
Что не так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var NewTag:integer;
begin

   Rg.OnClick := nil;
   NewTag:=RG.ItemIndex;
   Rg.ItemIndex := RG.Tag ;
   if (MessageDlg('Edthty?'+IntToStr(NewTag),mtConfirmation, [mbYes,mbNo], 0)= mrYes)
     then
      RG.ItemIndex:=NewTag;

    Rg.OnClick := RGClick;
    RG.TAg:=RG.ItemIndex;

end;
...
Рейтинг: 0 / 0
13.03.2018, 17:51
    #39614284
verve
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
Belotsky Serge,
похоже, что проблема была в фокусе.
...
Рейтинг: 0 / 0
13.03.2018, 21:12
    #39614399
kep-ko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RadioGroup запрос перед клик?
verve, ех-ох MessageDlg )
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 procedure AllowClick(var Msg: TMessage); message WM_USER;

var
 Forma: TForma;
 OldRadio : function (Wnd :HWND; Msg :Cardinal; WParam:WPARAM; LParam:LPARAM):LRESULT; stdcall;

implementation

function NewRadio(Wnd :HWND; Msg :Cardinal; wParam:WPARAM; lParam:LPARAM):LRESULT; stdcall;
var
 item:Integer;
begin
 if (Msg = WM_COMMAND)then
  if HiWord(wParam) = BN_CLICKED then
   with Forma.RadioGroup1 do
    if Tag = 0 then
     for item := 0 to Items.Count-1 do
      if lParam = Buttons[item].Handle then
       if item <> ItemIndex then Exit(Byte(PostMessage(Forma.Handle, WM_USER, item, 0)))
        else Break;
 Result := OldRadio(Wnd, Msg, wParam, lParam);
end;

procedure TForma.AllowClick(var Msg: TMessage);
begin
 RadioGroup1.Tag := Msg.wParam + 1;
 if MessageDlg('Edthty?'+IntToStr(Msg.WParam),mtConfirmation, [mbYes,mbNo], 0) = mrYes
  then RadioGroup1.ItemIndex := Msg.wParam;
 RadioGroup1.Tag := 0;
end;

...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / RadioGroup запрос перед клик? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]