TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
habikus
Üye
Mesajlar: 69
Kayıt: 14 Eyl 2011 04:23

TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Mesaj gönderen habikus »

TStyleManager.TrySetStyle(StyleName); komutu ile programın tema sını değiştirebiliyoruz. Gri renkli temalarda label ları beyaz gösteriyor. Ben ise label ların sistem dışı olmasını istiyorum. Edit leri aşağıdaki komut ile sistem dışı bıraktım.

Kod: Tümünü seç

TStyleManager.Engine.RegisterStyleHook(TEdit, TEditStyleHookColor);
Fakat label leri devre dışı yapamadım. Bu konuda yardımcı olan olursa sevinirim.
ertank
Kıdemli Üye
Mesajlar: 1711
Kayıt: 12 Eyl 2015 12:45

Re: TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Mesaj gönderen ertank »

Merhaba,

Bir tane Label için Object Inspector'da StyleElements değerlerini False yapıp stil değiştirildiğinde istediğiniz davranışı elde edebiliyor musunuz kontrol edebilir misiniz?
habikus
Üye
Mesajlar: 69
Kayıt: 14 Eyl 2011 04:23

Re: TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Mesaj gönderen habikus »

Evet. Ama ben tüm formlardaki label ler için istiyorum. Tek tek yapmak çok uzun sürer.
ertank
Kıdemli Üye
Mesajlar: 1711
Kayıt: 12 Eyl 2015 12:45

Re: TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Mesaj gönderen ertank »

Dizayn kısmında bunu yapmak eski projeler veya ilerlemiş projeler için mümkün olmayabiliyor. Ya da dediğiniz gibi çok zaman alan bir işlem olabiliyor. Bu durumda aşağıdaki unit'i projenizin erişebileceği bir dizine kopyalayıp tüm formların uses kısmına ekleyin.

Kod: Tümünü seç

unit uUtils.Styles;

interface

uses
  Vcl.Forms,
  Vcl.StdCtrls,
  Vcl.Controls;

type
  TMyStyle = class sealed
  public
    class procedure NoStyle(AForm: TForm);
    class procedure UseStyle(AForm: TForm);
  end;

implementation

class procedure TMyStyle.NoStyle(AForm: TForm);
var
  i: Integer;
begin
  for i := 0 to Pred(AForm.ComponentCount) do
  begin
    if AForm.Components[i] is TLabel then
      TLabel(AForm.Components[i]).StyleElements := [];
  end;
end;

class procedure TMyStyle.UseStyle(AForm: TForm);
var
  i: Integer;
begin
  for i := 0 to Pred(AForm.ComponentCount) do
  begin
    if AForm.Components[i] is TLabel then
      TLabel(AForm.Components[i]).StyleElements := [seFont, seClient, seBorder];
  end;
end;

end.
Her formun OnCreate kısmına aşağıdaki örnekte olduğu gibi bir satırlık eklemler yapın.

Kod: Tümünü seç

procedure TForm15.FormCreate(Sender: TObject);
begin
  TMyStyle.NoStyle(Self);
end;
Böylece en azından uğraşınız form adedi kadar olacaktır.

Bir sebepten stil kullanımını Label'lar için tekrar aktif etmek isterseniz TMyStyle.UseStyle() fonksiyonunu kullanabilirsiniz.
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 118
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Mesaj gönderen yhackup »

Selamlar
Aşağıdaki kod ile formundaki tüm labelleri visible yapabilirsin...

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TLabel) then
    begin
      (Components[i] as TLabel).Visible := False;
    end;
  end;
end;
Ama Labelleri kaldırmak yerine belirli temalarda rengini de değiştirebilirsin mantık aynı

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TLabel) then
    begin
      (Components[i] as TLabel).Font.Color := clRed;
    end;
  end;
end;
Çaylak Delphici :D

Yakup ULUTAŞ
edo
Üye
Mesajlar: 40
Kayıt: 05 Haz 2005 11:12

Re: TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Mesaj gönderen edo »

Inherited denen şey böyle şeyler için var :) Zamanında bütün formlarınızı bir formdan türetmiş olsaydınız şimdi sadece temeldeki forma gidip bu komutu eklemek yeterli olurdu. Bundan sonrası için kullağınıza küpe olsun, inherited nedir bir araştırın ;)
habikus
Üye
Mesajlar: 69
Kayıt: 14 Eyl 2011 04:23

Re: TStyleManager.TrySetStyle temada label leri devre dışı bırakma

Mesaj gönderen habikus »

Tamam inşallah. Bi araştırayım.
Cevapla