for i := 0 to ComponentCount-1 do
begin
if ( Components is TMenuItem ) AND ( TMenuItem( Components ).Tag=modulid)
then
begin
TMenuItem( Components ).Visible :=true;
end;
end;
selam dostlar , takıldığım bir konuda fikir rica ediyor olacağım
yukarıdaki şekilde web panelden kullanıcının yetkisini açıyorum ve program açıldığında mainmenulerin tag bilgilerine göre
mainmenü elemanlarını gizliyor yada açıyorum ancak ilgili mainmenude hiçbir modül yetkisi yoksa o main menü hiç görünmeden gizlensin istiyorum
aaa bbb ccc
a1 b1 c1
a2 b2 c2
a1 ve a2 nin visible false ise aaa menüsü görünmemeli
mainmenu.items.count=0 diyemiyorum çünkü eleman sayısı 0 dan büyük bu durumda görünen eleman sayısı 0 ise demen gerekir sanırım
takıldım kaldım, nasıl bir yok izlemek gerekir
main menü görünen eleman yoksa gizlensin
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
main menü görünen eleman yoksa gizlensin
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: main menü görünen eleman yoksa gizlensin
Selam, Aklıma iki yöntem geliyor,
1. Programa kullanıcı adı ve şifre ile giriş yapıyorsa o anda yetkisine göre neleri göstermek istiyorsan Visible :=true; yapabilirsin.
2. Kullanıcı kaydet, sil gibi durumlarda yine databasedeki yetkisine göre işlem devam edebilir...
Örnek:
Kolay gelsin...
1. Programa kullanıcı adı ve şifre ile giriş yapıyorsa o anda yetkisine göre neleri göstermek istiyorsan Visible :=true; yapabilirsin.
2. Kullanıcı kaydet, sil gibi durumlarda yine databasedeki yetkisine göre işlem devam edebilir...
Örnek:
Kod: Tümünü seç
procedure TForm3.Button1Click(Sender: TObject);
begin
with Form1.Userler do
begin
Close;
SQL.Clear;
SQL.Add('Select * From User Where KULLANICI=:KADI and ONAYLI=:ONAY');
ParamByName('KADI').Value := (Form1.Edit1.Text);
ParamByName('ONAY').AsString := 'Evet';
Prepared := True;
Open;
if Not IsEmpty then
begin
Application.MessageBox('Giriş yetkisi var', 'var',
MB_Ok or MB_ICONQUESTION);
end
else
begin
Application.MessageBox('Giriş yetkisi yok!', 'yok',
MB_Ok or MB_ICONQUESTION);
end;
end;
end;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: main menü görünen eleman yoksa gizlensin
Merhaba;
Aklıma gelen yöntemi söyleyeyim belki farklı fikirler verebilir size, menü başlıklarına AAA,BBB,CCC 100,200,300 şeklinde Tağ belirleyin bunlarında alt menülerine ise 101,102,103...115 - 201,202,203...213 - 301,302...308 şeklinde devam ettirin.
yukarıdaki döngüyü 101-199 arası yaparken a değişkenini her kontrolde 1 artırın döngü sonunda eğer a değeri Sıfır ise AAA menüsünü Visible yapabilirsiniz.
Kolay gelsin..
Aklıma gelen yöntemi söyleyeyim belki farklı fikirler verebilir size, menü başlıklarına AAA,BBB,CCC 100,200,300 şeklinde Tağ belirleyin bunlarında alt menülerine ise 101,102,103...115 - 201,202,203...213 - 301,302...308 şeklinde devam ettirin.
yukarıdaki döngüyü 101-199 arası yaparken a değişkenini her kontrolde 1 artırın döngü sonunda eğer a değeri Sıfır ise AAA menüsünü Visible yapabilirsiniz.
Kolay gelsin..
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Re: main menü görünen eleman yoksa gizlensin
Ben de kodunuz da bir iyileştirme önereceğim. TMenu parametresi alan ve kendi içinde reqursive(özyinelemeli) dönebilen bir metodunuz olur ise daha şık olacaktır. Bu sayede ilgili metoda istediğiniz an bir TMainMenu istediğiniz an bir TPopupMenu instance'ı geçebilirsiniz. Ayrıca; alt alt'a eleman içeren durumlarda da düzgün çalışacaktır bu sayede.
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
Re: main menü görünen eleman yoksa gizlensin
Selam , aklıma gelen yöntem bu oldu aslında ama daha kısa pratik bir fikir öğrenebilirim diye yazmak istedim
Su anda uygulama kullanılıyor ama kullanicilar tikliyorum birşey gelmiyor sorularından biktim, gizliyim kurtulalım dedim yorumlar için tesekkurler
Su anda uygulama kullanılıyor ama kullanicilar tikliyorum birşey gelmiyor sorularından biktim, gizliyim kurtulalım dedim yorumlar için tesekkurler
xozcanx yazdı:Merhaba;
Aklıma gelen yöntemi söyleyeyim belki farklı fikirler verebilir size, menü başlıklarına AAA,BBB,CCC 100,200,300 şeklinde Tağ belirleyin bunlarında alt menülerine ise 101,102,103...115 - 201,202,203...213 - 301,302...308 şeklinde devam ettirin.
yukarıdaki döngüyü 101-199 arası yaparken a değişkenini her kontrolde 1 artırın döngü sonunda eğer a değeri Sıfır ise AAA menüsünü Visible yapabilirsiniz.
Kolay gelsin..
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: main menü görünen eleman yoksa gizlensin
Aklıma gelen ilk çözüm:
Soruda verilen örneğe göre bu şekilde bir çözüm işinizi görür. Ama alt menu'lerde de aynı kontrolün yapılması gerekiyorsa Sn. thelvaci'nın dediği gibi recursive bir fonksiyon yazılmalı.
Kod: Tümünü seç
function CheckVisibility(MI: TMenuItem): Boolean;
var i: integer;
begin
Result := False;
for i := 0 to MI.Count-1 do
if MI.Items[i].Visible then
begin
Result := True;
Break;
end;
end;
procedure TFormTest.Button1Click(Sender: TObject);
var MI: TMenuItem;
begin
for MI in MainMenu1.Items do
MI.Visible := CheckVisibilty(MI);
end;
There's no place like 127.0.0.1
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
Re: main menü görünen eleman yoksa gizlensin
sevgili simaweb verdiğin function işime yaradı , teşekkür ederim
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.