🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
9 messages
9 total messages Started by Romek Tue, 01 Aug 2017 12:49
TEdit i ReadOnly
#345979
Author: Romek
Date: Tue, 01 Aug 2017 12:49
7 lines
1556 bytes
Gdy zmianie ulegnie właściwość Enabled lub Visible, to do kontrolki wysyłany jest message CM_ENABLEDCHANGED lub odpowiednio CM_VISIBLECHANGED. Czy po zmianie właściwiości ReadOnly jest wysyłany komunikat do kontrolki? Nie udało mi się nic znaleźć na ten temat.

Z góry dziękuję za pomoc.


Romek
Re: TEdit i ReadOnly
#345980
Author: Roman Tyczka
Date: Tue, 01 Aug 2017 13:23
23 lines
1457 bytes
On Tue, 1 Aug 2017 05:49:52 -0700 (PDT), Romek wrote:

> Gdy zmianie ulegnie właściwość Enabled lub Visible, to do kontrolki
> wysyłany jest message CM_ENABLEDCHANGED lub odpowiednio
> CM_VISIBLECHANGED. Czy po zmianie właściwiości ReadOnly jest wysyłany
> komunikat do kontrolki? Nie udało mi się nic znaleźć na ten temat. 

Wystarczy zajrzeć w źródła:

procedure TCustomEdit.SetReadOnly(Value: Boolean);
begin
  if FReadOnly <> Value then
  begin
    FReadOnly := Value;
    if HandleAllocated then
      SendMessage(Handle, EM_SETREADONLY, Ord(Value), 0);
  end;
  FSaveReadOnly := FReadOnly;
end;

-- 
pozdrawiam
Roman Tyczka
Re: TEdit i ReadOnly
#345981
Author: Romek
Date: Tue, 01 Aug 2017 20:38
3 lines
1728 bytes
Niewłaściwie opisałem mój problem. Komunikat EM_SETREADONLY jest wysyłany do "systemu". Czy system wysyła w odpowiedzi jakiś komunikat do aplikacji inforujący, że stan kontrolki (ReadOnly) uległ zmianie? Stworzyłem klasę potomną dla TCustomEdit i chciałbym aby reagowała na zmianę właściwości ReadOnly.

Romek
Re: TEdit i ReadOnly
#345960
Author: Roman Tyczka
Date: Wed, 02 Aug 2017 07:45
14 lines
1462 bytes
On Tue, 1 Aug 2017 13:38:32 -0700 (PDT), Romek wrote:

> Niewłaściwie opisałem mój problem. Komunikat EM_SETREADONLY jest wysyłany do "systemu". Czy system wysyła w odpowiedzi jakiś komunikat do aplikacji inforujący, że stan kontrolki (ReadOnly) uległ zmianie? Stworzyłem klasę potomną dla TCustomEdit i chciałbym aby reagowała na zmianę właściwości ReadOnly.

Żeby to sprawdzić możesz nadpisać metodę TWinControl:

procedure WndProc(var Message: TMessage); override;

i tam się dowiesz co kontrolka dostaje i kiedy.


-- 
pozdrawiam
Roman Tyczka
Re: TEdit i ReadOnly
#345982
Author: zpksoft
Date: Wed, 02 Aug 2017 08:16
8 lines
1871 bytes
W dniu wtorek, 1 sierpnia 2017 22:38:38 UTC+2 użytkownik Romek napisał:
> Niewłaściwie opisałem mój problem. Komunikat EM_SETREADONLY jest wysyłany do "systemu". Czy system wysyła w odpowiedzi jakiś komunikat do aplikacji inforujący, że stan kontrolki (ReadOnly) uległ zmianie? Stworzyłem klasę potomną dla TCustomEdit i chciałbym aby reagowała na zmianę właściwości ReadOnly.
> 
> Romek

To nie jest komunikat wysyłany do systemu tylko do obiektu o uchwycie "handle", czyli do kontrolki.

Paweł
Re: TEdit i ReadOnly
#345983
Author: Roman Tyczka
Date: Wed, 02 Aug 2017 08:31
13 lines
1670 bytes
On Wed, 2 Aug 2017 01:16:17 -0700 (PDT), zpksoft wrote:

>> Niewłaściwie opisałem mój problem. Komunikat EM_SETREADONLY jest wysyłany do "systemu". Czy system wysyła w odpowiedzi jakiś komunikat do aplikacji inforujący, że stan kontrolki (ReadOnly) uległ zmianie? Stworzyłem klasę potomną dla TCustomEdit i chciałbym aby reagowała na zmianę właściwości ReadOnly.
>> 
> To nie jest komunikat wysyłany do systemu tylko do obiektu o uchwycie "handle", czyli do kontrolki.

Pisząc w cudzysłowie "systemu" Romek miał na myśli, że kontrolka TEdit
(oraz kilka innych) to wrappery na systemowe kontrolki i komunikaty lecą
właśnie do niższej warstwy obsługiwanej przez system.

-- 
pozdrawiam
Roman Tyczka
Re: TEdit i ReadOnly
#345984
Author: zpksoft
Date: Wed, 02 Aug 2017 09:10
29 lines
2590 bytes
W dniu środa, 2 sierpnia 2017 10:31:29 UTC+2 użytkownik Roman Tyczka napisał:
> On Wed, 2 Aug 2017 01:16:17 -0700 (PDT), zpksoft wrote:
> 
> >> Niewłaściwie opisałem mój problem. Komunikat EM_SETREADONLY jest wysyłany do "systemu". Czy system wysyła w odpowiedzi jakiś komunikat do aplikacji inforujący, że stan kontrolki (ReadOnly) uległ zmianie? Stworzyłem klasę potomną dla TCustomEdit i chciałbym aby reagowała na zmianę właściwości ReadOnly.
> >> 
> > To nie jest komunikat wysyłany do systemu tylko do obiektu o uchwycie "handle", czyli do kontrolki.
> 
> Pisząc w cudzysłowie "systemu" Romek miał na myśli, że kontrolka TEdit
> (oraz kilka innych) to wrappery na systemowe kontrolki i komunikaty lecą
> właśnie do niższej warstwy obsługiwanej przez system.
> 
> -- 
> pozdrawiam
> Roman Tyczka

Tak, wiem. Ale to niczego nie zmienia. Jeśli dobrze zrozumiałem Romka to wystarczy pokryć metodę  setReadOnly i dać modyfikację, np.

  if FReadOnly <> Value then
  begin
    FReadOnly := Value;
    if HandleAllocated then
    begin  
      SendMessage(Handle, EM_SETREADONLY, Ord(Value), 0);
      NpPomalujCosNaCanvasieKontrolki();
    end;
  end;
  FSaveReadOnly := FReadOnly; 

Paweł
Re: TEdit i ReadOnly
#345985
Author: zpksoft
Date: Wed, 02 Aug 2017 09:14
19 lines
2575 bytes
W dniu środa, 2 sierpnia 2017 10:31:29 UTC+2 użytkownik Roman Tyczka napisał:
> On Wed, 2 Aug 2017 01:16:17 -0700 (PDT), zpksoft wrote:
> 
> >> Niewłaściwie opisałem mój problem. Komunikat EM_SETREADONLY jest wysyłany do "systemu". Czy system wysyła w odpowiedzi jakiś komunikat do aplikacji inforujący, że stan kontrolki (ReadOnly) uległ zmianie? Stworzyłem klasę potomną dla TCustomEdit i chciałbym aby reagowała na zmianę właściwości ReadOnly.
> >> 
> > To nie jest komunikat wysyłany do systemu tylko do obiektu o uchwycie "handle", czyli do kontrolki.
> 
> Pisząc w cudzysłowie "systemu" Romek miał na myśli, że kontrolka TEdit
> (oraz kilka innych) to wrappery na systemowe kontrolki i komunikaty lecą
> właśnie do niższej warstwy obsługiwanej przez system.
> 
> -- 
> pozdrawiam
> Roman Tyczka

Można też przechwycić komunikaty EM_SETREADONLY i samodzielnie je obsłużyć, ale żeby nie wpaść w pętlę raczej należałoby wówczas zrezygnować ze standardowej procedury setReadOnly...
Przynajmniej ja tak bym kombinował.

Paweł
Re: TEdit i ReadOnly
#345986
Author: Romek
Date: Wed, 02 Aug 2017 14:13
8 lines
1723 bytes
Dziękuję za pomoc i podpowiedzi. Popełniłem błąd i dlatego wydawało mi się, że wysłanie komunikatu 

SendMessage(Handle, EM_SETREADONLY, Ord(Value), 0); 

nie działa.


Romek
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads