스피드버튼(TSpeedButton)은 각 버튼들을 그룹화시키면 버튼 간에 토글이 가능하도록 되어있다.
예를 들어 Button1과 Button2를 GroupIndex를 1로 설정하여 그룹화한 뒤,
각 버튼을 누르면 서로 교대로 Down, Up이 처리된다. 즉 버튼들이 라디오버튼처럼 동작하게 된다.
GroupIndex를 0으로 설정하면 그룹이 해제되고 일반 버튼처럼 동작하며, 상호 Down/Up은 해제된다.
그나저나 마땅한 토글버튼 컨트롤이 없는데...(툴박스의 툴버튼은 토글로 동작하지만 그냥 쓸 수가 없다)
여러 버튼, 더더군다나 그룹화도 필요없고 하나의 버튼에 대해 토글을 동작시키고 싶으니
저 스피드버튼의 동작을 교묘하게 이동하여 토글기능을 넣어보자!
우선 SpeedButton을 하나 올리고, GroupIndex는 기본 0으로 두고, AllowAllUp 프로퍼티를 True로 설정한다.
(AllowAllUp은 그룹으로 설정된 스피드버튼들을 모두 Up상태로 할수 있도록 하기 위한 속성으로
다운된 자기 자신을 누르면 모든 버튼이 Up상태가 된다)
그런 다음 OnClick/OnMouseDown/OnMouseUp 중 적당한 곳에 아래와 같이 작성한다.
if TSpeedButton(Sender).GroupIndex = 0 then
begin
TSpeedButton(Sender).GroupIndex := 1;
TSpeedButton(Sender).Down := True;
end
else
begin
TSpeedButton(Sender).GroupIndex := 0;
//TSpeedButton(Sender).Down := False; //GroupIndex가 0이 되면 자동으로 Down이 False가 되므로 사실상 필요없는 부분
end;
버튼 상태는 Down으로 참조하면 된다.
토글버튼 참 쉽죠~~!^^
끝!
'DogFoot > Delphi' 카테고리의 다른 글
[Delphi] 다중 예외 처리: 다중 Exception 객체 처리 (0) | 2022.12.22 |
---|---|
[IdFTP] Indy FTP, Connection reset by peer: 10054 (0) | 2022.01.20 |
[Delphi] 중첩 예외처리(try...except) (0) | 2021.04.23 |
[FireDAC] MySQL/mariaDB 서버 오류 메시지 한글 깨짐 (0) | 2021.04.16 |
[FireDAC] MySQL Commands out of sync; you can't run this command now (0) | 2021.04.02 |
댓글