(15-05-2026, Saat: 00:35)CesuR Adlı Kullanıcıdan Alıntı: [ -> ]VCL uygulamalarda speedbutton gibi bileşenlerin neden propertisinde color rengi yok anlamış değilim. Formdaki nesnelerin renklerini Delphi 7 de ne güzel basitçe değiştirebiliyorduk. Rad Studio ise style desinger koymuş resmen ayrı bir dil oda. Arkadaş kolaylık yapacaklarına zorluk çıkarmışlar resmen..
1) VCL kontrolleri tamamen MSWindows işletim sistemi kontrollerine dayanır, bu nedenle varsayılan olarak Object Pascal (Delphi) nesneleri değil, yalnızca orijinal işletim sistemi kontrollerini paketleyen bir "sarmalayıcı"dır. Stiller ve diğer "tuval" özellikleri kısıtlanmadığı ve serbestçe kullanılabildiği Delphi'de oluşturulan kontrollerin aksine.
2) Varsayılan olarak, Delphi sistemin stilini yakalamaya ve bunu kendi avantajına kullanmaya çalışır, ancak yerel MSWindows kontrolleri için son söz genellikle MSWindows'a aittir ve kullanıcının ekranında efekt ve renk "karnavalı" oluşturmaktan kaçınmak için kuralları katıdır.
3) Bununla birlikte, tüm TControl'ler için, temelde kontrolleri yeniden oluşturmanız veya Delphi temel sınıfında özel bir teknik kullanarak ortak davranışını yakalamanız veya değiştirmeniz gerekir.
4) Bunu yapmanın daha kolay bir yolu, örneğin TButton gibi standart sınıfa dayalı yeni bir sınıf (veya bileşen) oluşturmak ve bileşen penceresinin işletim sisteminden almayı beklediği yöntemleri veya mesajları değiştirmektir. Bu şekilde, bileşenin veya nesnenin davranışını değiştirebilirsiniz. Ancak, bunun kolay olmadığını hatırlatmalıyım, çünkü bileşene her zaman düzinelerce veya yüzlerce mesaj geliyor ve son olarak, Delphi stil yöneticisi, MSWindows, Linux, Android, macOS vb. işletim sisteminin dayattığı kurallara uymaya çalışıyor...
5) TButton'larla ilgili sorununuzu çözmek için, aşağıdaki gibi bazı yöntemlerin davranışını düzenleyebilir veya değiştirebilirsiniz:
private
{ Mesaj Kesicileri }
private
{ Interceptadores de Mensagem }
procedure CNDrawItem( var Message: TWMDrawItem ); message CN_DRAWITEM;
procedure WMEraseBkgnd( var Message: TWMEraseBkgnd ); message WM_ERASEBKGND;
procedure CMMouseEnter( var Message: TMessage ); message CM_MOUSEENTER;
procedure CMMouseLeave( var Message: TMessage ); message CM_MOUSELEAVE;
procedure WMSize( var Message: TWMSize ); message WM_SIZE;
korumalı
procedure CreateParams( var Params: TCreateParams ); override;
procedure SetButtonStyle( ADefault: Boolean ); override;
6) Bu şekilde, SetButtonStyle(...) yöntemini "sessize" edebilirsiniz, yani sınıftaki temel işlevi olmadan: düğmeyi biçimlendirmek!!!
7) Düğmenin tuvaline kendi stilinizi çizmek için yapabileceğiniz bir şey şöyledir. Başlangıçta, düğmeyi şu parametrelerle oluşturursunuz:
{ Win32 Mesajları }
procedure TBlueButton.CreateParams( var Params: TCreateParams );
begin
inherited CreateParams( Params );
Params.Style := Params.Style or BS_OWNERDRAW;
end;
procedure TBlueButton.SetButtonStyle( ADefault: Boolean );
begin
// VCL'yi sessize alır
end;
8) Şimdi, düğmeyi istediğiniz gibi biçimlendirmek için yukarıdaki diğer yöntemleri kullanabilirsiniz: renk, kenarlıklar vb...
9) Örneğe bakın:
SOURCE CODE FULL