본문 바로가기

컴퓨터/Delphi

TEdit 클릭 시 내용 지워지기, 다시 나타내기

TEdit은 단일 라인의 입력 컴포넌트로 많이 쓰이는 컴포넌트입니다.

TEdit은 기본적으로 네모 박스 하나만 나오고 이것이 무슨 값을 취하려는지 나오지 않습니다.


이렇게 네모 박스만 생기죠.

그래서 이 박스가 무엇인지를 위해 앞에 TLabel을 달거나 이미지를 붙여줍니다.



하지만 이렇게 하면 VCL이나 PC같이 큰 화면에서는 문제가 없지만 FMX에서는 가용 면적이 줄어드는 역효과가 있습니다.

이를 위해 델파이는 TLabel이 아닌 TEdit의 TextPrompt 프로퍼티가 정의되어 있습니다.

이 프로퍼티는 Prompt 즉, 해당 TEdit에 사용자가 입력한 내용과 별개로 배경처럼 해당 TEdit이 무엇을 입력받으려는지를 명시해주는 역할을 합니다.



이렇게 TEdit을 선택한 뒤, 해당 TEdit에서 입력받을 것이 무엇인지 명시해주면 아래와 같이 희미하게 나타납니다.



문제는 이렇게만 하면 입력 시에 프롬프트가 지워지지 않아 내가 무얼 입력했는지 글자가 겹쳐 보기 힘들다는 점입니다.




TEdit의 OI의 Events를 보면 OnCanFocus 라는 이벤트가 있습니다. 이 이벤트는 해당 개체에 포커스(초점)이 있으면 발생하는 이벤트로 TEdit에서 내용을 입력하기 위해 커서가 들어가는 것도 초점이 들어가는 것입니다.

이제 이 이벤트에 내용을 채웁니다.


(Sender as TEdit).TextPrompt := '';


간단합니다.

우리의 목적은 입력 시에 내용을 지워주면 되는 거니까요.

문제는 여기서 발생합니다.

만약 포커스가 있었다가, 아무 내용도 없이 떠나면 이게 무슨 입력이었는지 알 수가 없습니다.

내용이 빈값이면 다시 보여주어야겠죠.


Events에 OnExit라는 이벤트가 있습니다.

이 이벤트는 포커스가 떠날 때 발생하는 이벤트입니다.

그럼 이 이벤트의 내용을 채워봅시다.


if (Sender as TEdit).Text = '' then

(Sender as TEdit).TextPrompt := '이것은 프롬프트';


이렇게 해주시면 TEdit에 포커스가 발생했을 때, 포커스가 떠났을 때 TextPrompt의 내용을 없애기도, 다시 보여주기도 합니다.

이를 응용하면, 항시 프롬프트가 있어야 하면 프롬프트의 색을 더 옅게 한다던지, 프롬프트가 아닌 Text그 자체에 대한 수정도 가능합니다.

반대로 Text에 명시를 해줬다가 입력을 시작하면 Prompt로 바꿔줄 수도 있죠.


이에 대한 응용은 여러분의 몫입니다.

'컴퓨터 > Delphi' 카테고리의 다른 글

[QuantumGrid] CheckBox 사용  (0) 2018.11.30
이상한 Undeclared  (0) 2017.06.16
[Component] Indy 에서 예외처리 하기  (0) 2016.11.26
TAlphaColor의 색상 표현  (0) 2016.11.19
[FMX][Timage] 이미지 복사  (0) 2016.09.25