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

Вниз

CheckBox   Найти похожие ветки 

 
Washington   (2007-03-10 21:12) [0]

Как сделать, чтобы CheckBox нельзя было отмечать вручную. А заодно то же самое для CheckListBox, пожалуйста подскажите


 
Loginov Dmitry ©   (2007-03-10 21:23) [1]

Enabled := False;


 
RASkov   (2007-03-11 04:06) [2]

> [0] Washington   (10.03.07 21:12)

procedure CheckBoxClick();
begin
CheckBox.Checked:=False;
end;


 
Washington   (2007-03-12 20:00) [3]

Enabled:=false не совсем мне подходит, CheckBox.Checked:=false ваще цикл какой-то происходит и ошибка прёт


 
Washington   (2007-03-12 20:03) [4]

Enabled:=false не подходит т.к. он становится серым, а CheckBox:=false нельзя т.к. цикл и вследствие - ошибка


 
Knight ©   (2007-03-12 20:04) [5]

Прёт где-то в другом месте...


 
Джо ©   (2007-03-12 20:06) [6]

> CheckBox:=false нельзя т.к. цикл и вследствие - ошибка

Что там «прет»? Ну, сделай так, чтобы не «перло» или, если на то пошло, опиши по-человечески, что там у тебя происходит.


 
Knight ©   (2007-03-12 20:07) [7]

Бросаешь его на панел и делаешь нот енэйвлед её :)


 
Knight ©   (2007-03-12 20:09) [8]

И не сереет и ничё никуда не прёт %)


 
Knight ©   (2007-03-12 20:17) [9]

И убери

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 CheckBox1.Checked:=not CheckBox1.Checked;
end;


 
Knight ©   (2007-03-12 20:18) [10]

Если таковое присутствует... а он таки присутствует.. или мне мой телепататор абгрейдить надо %)))))))


 
Washington   (2007-03-12 20:31) [11]

ёлки-брёвна, прямо взрыв эмоций
Во-первых когда CheckBox1.Enabled = false он серого цвета!!!!
Во-вторых когда
>procedure TForm5.CheckBox1Click(Sender: TObject);
>begin
>if CheckBox1.Checked=true then CheckBox1.Checked:=true else
>CheckBox1.Checked:=false;
>end;
ничего не происходит, а если
>procedure TForm5.CheckBox1Click(Sender: TObject);
>begin
>if CheckBox1.Checked=true then CheckBox1.Checked:=false else
>CheckBox1.Checked:=true;
>end;
ошибка - Stack Overflow.

Был предложен такой вариант:
procedure TForm1.CheckBox1Click(Sender: TObject);
var
  old: TNotifyEvent;
begin
if b then
 with (Sender as TCheckBox) do
 begin
  old := OnClick;
  OnClick := nil;
  Checked:=not Checked;
  OnClick := old;
 end;
end;

b - гдлобальная перемена boolean

но этот вариант тоже чтото не пропёр


 
Knight ©   (2007-03-12 20:32) [12]

Телепортатор оставляю на месте.. работает ещё.. :)))))))))


 
Knight ©   (2007-03-12 20:32) [13]

.. т.е. телепатор...


 
Knight ©   (2007-03-12 20:34) [14]

Зачем тыт циклишь прогу если статус меняется автоматом (при клике) или устанавливается тобой где-то ещё?


 
Knight ©   (2007-03-12 20:35) [15]

А про серость... пробовал на панель закинуть и сделать Enabled=False не у бокса а у панели?


 
Джо ©   (2007-03-12 20:36) [16]

> но этот вариант тоже чтото не пропёр

Предлагаю завязывать со сленгом.


 
Knight ©   (2007-03-12 20:36) [17]

Если чексов несколько и они как-то логически связаны, то можно запользовать GroupBox результат то же.


 
Washington   (2007-03-12 20:39) [18]

Чекс только один


 
Knight ©   (2007-03-12 20:43) [19]

Ну и брось его на панель без выпухлостей и вогнутостей.. поставь панели Енэйблед=Фолс, убери обработку смену статуса чекса в онКлике и будет те счастье ;)


 
Washington   (2007-03-12 20:45) [20]

Парились долго...
Сделал через панель - всё путём. Спасибо

зы А чем сленг не угодил?


 
Knight ©   (2007-03-12 20:49) [21]

Щас только посмотрел, что тема от 10-го числа... ужас... :)))


 
RASkov   (2007-03-12 20:56) [22]

Странно..., а у меня вот так все работает
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 CheckBox1.Checked:=False;
end;

Т.е. при клике по чекбоксу он просто не выделяется(не ставиться галочка) и все...
D7 - на всякий случай, но это по моему не важно.....


 
Knight ©   (2007-03-12 20:57) [23]

А ты поробуй его отметить.. хоть как-то.. во посмеёмся... проще удалить :)


 
RASkov   (2007-03-12 21:08) [24]

> [23] Knight ©   (12.03.07 20:57)

Если это мне, то легко:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 CheckBox1.Checked:=False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 CheckBox1.OnClick:=nil;
 CheckBox1.Checked:=True;
 CheckBox1.OnClick:=CheckBox1Click;
end;


 
Knight ©   (2007-03-12 21:10) [25]

А потом клик на чексе... %)))))))))))


 
RASkov   (2007-03-12 21:14) [26]

> [25] Knight ©   (12.03.07 21:10)

Ну вот еще вариант :)

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if GetAsyncKeyState(VK_CONTROL)=0 then CheckBox1.Checked:=False;
end;


 
RASkov   (2007-03-12 21:15) [27]

> [25] Knight ©   (12.03.07 21:10)

Я вообще не пойму, в чем прикол :(

> Как сделать, чтобы CheckBox нельзя было отмечать вручную.

Неужели мои способы этого не решают????


 
Knight ©   (2007-03-12 21:17) [28]

И чем он отличается от предыдущего? %)


 
RASkov   (2007-03-12 21:17) [29]

> [25] Knight ©   (12.03.07 21:10)

Походу догадался... Нужно чтобы вручную нельзя было переключать состояние чеков, так что ли?
:) Ужос.


 
Knight ©   (2007-03-12 21:18) [30]

Да.. как будь-то он ReadOnly...


 
RASkov   (2007-03-12 21:18) [31]

> [30] Knight ©   (12.03.07 21:18)

Сейчас придумаем ...:)


 
RASkov   (2007-03-12 21:21) [32]

> [30] Knight ©   (12.03.07 21:18)

Тогда вот :)

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 CheckBox1.Checked:=CheckBox1.Tag=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if CheckBox1.Tag=0 then CheckBox1.Tag:=1 else CheckBox1.Tag:=0;
 CheckBox1Click(CheckBox1);
end;


 
Knight ©   (2007-03-12 21:24) [33]

Маладца... только ещё моргание убрать... при клике :)


 
RASkov   (2007-03-12 21:27) [34]

> только ещё моргание убрать...

Ну это не из-за моего шаманства моргает.. :) А чем оно мешает? это стандартное моргание чеков.


 
Washington   (2007-03-24 15:03) [35]

Извиняюсь, что опять тему поднимаю со дна - насчёт CheckListBox"а то никто ничо не подсказал. Причём Enabled:=false нельзя, так как должно выполняться OnDblClick.


 
RASkov   (2007-03-24 21:39) [36]

> [35] Washington   (24.03.07 15:03)

У CheckListBox"а есть свойство Items у которого каждый элемент содержит строковое значение и TObject и есть событие OnClickCheck.
Осталось совместить код из [32] с CheckListBox"ом.... Подсказка: TObject Itema использовать вместо CheckBox1.Tag


 
_Knight_   (2007-03-25 23:12) [37]

Элементарно&#133 создай свой компонент с со свойством ReadOnly и добавь его проверку в процедуре ToggleClickCheck;


 
_Knight_   (2007-03-25 23:36) [38]

Поправьте если что не так&#133

unit CheckListBoxWithRO;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, StdCtrls, CheckLst;

type
 TCheckListBoxWithRO = class(TCheckListBox)
 private
   { Private declarations }
   FReadOnly: Boolean;
 protected
   { Protected declarations }
   procedure KeyPress(var Key: Char); override;
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); override;
 public
   { Public declarations }
 published
   { Published declarations }
   property ReadOnly:Boolean read FReadOnly write FReadOnly;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Knight_DC", [TCheckListBoxWithRO]);
end;

{ TCheckListBoxWithRO }

procedure TCheckListBoxWithRO.KeyPress(var Key: Char);
begin
 if not FReadOnly then inherited;
end;

procedure TCheckListBoxWithRO.MouseDown(Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if not FReadOnly then inherited;
end;

end.


 
_Knight_   (2007-03-26 00:02) [39]

ToggleClickCheck — отказался приватным, поэтому пришлось перекрыть клаву и мышь.


 
_Knight_   (2007-03-26 00:02) [40]

ToggleClickCheck — отказался приватным, поэтому пришлось перекрыть клаву и мышь.


 
_Knight_   (2007-03-26 10:43) [41]

Молчанье знак согласия... наверно правильно.


 
RASkov   (2007-03-26 13:19) [42]

> [41] _Knight_   (26.03.07 10:43)

Не много подправлю:

procedure TCheckListBoxWithRO.KeyPress(var Key: Char);
begin
 if not FReadOnly then inherited else
   if Assigned(OnKeyPress) then OnKeyPress(self, Key);
end;

procedure TCheckListBoxWithRO.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if not FReadOnly then inherited else
   if Assigned(OnMouseDown) then OnMouseDown(self, Button, Shift, X, Y);
end;


Не хотелось бы полность лишать таких событий....


 
_Knight_   (2007-03-26 13:24) [43]

Ну да.. спасибо.


 
_Knight_   (2007-03-26 13:27) [44]

> Washington   (10.03.07 21:12)

Готовой решение... "Налетай не скупись, покупай живопИсь" © (Операция Ы)



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

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

Наверх




Память: 0.57 MB
Время: 0.078 c
2-1174910685
Sonia
2007-03-26 16:04
2007.04.15
Поиск значения в БД через DBLookupComboBox


3-1169651062
Сергей Чурсин
2007-01-24 18:04
2007.04.15
IB : Удаление таблицы, привязанной к процедуре, в этой процедуре


15-1174210474
Донской
2007-03-18 12:34
2007.04.15
IDE семерки


15-1173877098
ArchValentin
2007-03-14 15:58
2007.04.15
Delphi & WindowsVista


2-1174653515
valua
2007-03-23 15:38
2007.04.15
DivMod