MainMenu ıtems click
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
MainMenu ıtems click
Mainmenün ıtems inde windowstan aldığım klör isimleri var.örneğin
Aklösörü
Bklösörü
Cklasörü
..............
gibi
bu itemslerin herhangibirine click yaptığımda şunu yapmasını nasıl sağlayabilirim.
IBDATABASE1.DatabaseName:='C:\KursKayıt\Data\klasör adı\OGRENCI.FDB';
mainmenüde yer alan klsörler itemslerinden hangi itemse click yapılırsa o itemsin adını database yolu yapmak istiyorum.örneğin Aklösörü items ine tıkladığımda
IBDATABASE1.DatabaseName:='C:\KursKayıt\Data\Aklösörü\OGRENCI.FDB'; gibi klasör adı değişken olacak ama clicklendiğinde bunu her items e göre ayarlacak
Bu konuyu forumda ve nette aradım ama hiçbir sonuca varamadım.şimdiden teşekkürler
Aklösörü
Bklösörü
Cklasörü
..............
gibi
bu itemslerin herhangibirine click yaptığımda şunu yapmasını nasıl sağlayabilirim.
IBDATABASE1.DatabaseName:='C:\KursKayıt\Data\klasör adı\OGRENCI.FDB';
mainmenüde yer alan klsörler itemslerinden hangi itemse click yapılırsa o itemsin adını database yolu yapmak istiyorum.örneğin Aklösörü items ine tıkladığımda
IBDATABASE1.DatabaseName:='C:\KursKayıt\Data\Aklösörü\OGRENCI.FDB'; gibi klasör adı değişken olacak ama clicklendiğinde bunu her items e göre ayarlacak
Bu konuyu forumda ve nette aradım ama hiçbir sonuca varamadım.şimdiden teşekkürler
Klasörleri menüye klerken bunların onclick olayına da bir procedure atıyorsun ya (procedure menuClick(Sender: TObject); gibi bir procedure) yada öyle olması gerekiyor bu procedure'ün içinde şöyle yazabililrsin.
Kod: Tümünü seç
IBDATABASE1.DatabaseName:='C:\KursKayıt\Data\'+TmenuItem(sender).Caption+'\OGRENCI.FDB';
sayın ng şu şekilde bir denem yaptım ama olmadı + bu procedure mainmenüdeki kaçıncı itemsdeki verilerin bu yola yazılması gerektiğini bulacak çünkü ben mainmenu1.Items[6] altındaki isimleri bu yola yazdırmak istiyorum şu şekilde deneme yaptım
olmadı.Biraz daha açıklayıcı olabilirseniz sevinirim.Neyin onclick olayına atama yapacağız.teşekkürler
Kod: Tümünü seç
private
procedure menuClick(Sender: TObject);
.....
procedure menuClick(Sender: TObject);
begin
edit2.text:=TmenuItem.Items[6](sender).Caption;
end;
@haydarxxx cevabın geçliği için kusura bakmayın.
@ng dediği gibi, menuye eklerken ile ilave ediniz.
ilgili procedure de;
şeklinde olacaktır.
@ng dediği gibi, menuye eklerken
Kod: Tümünü seç
__.OnClick:=menuclick(sender);
ilgili procedure de;
Kod: Tümünü seç
procedure menuClick(Sender: TObject);
begin
showmessage(tmenuitem(Sender).Caption);
end;
" Her bildiğin doğru olsun. Ama her doğruyu her yerde söylemek doğru değildir. "
Arkadaşlar sabrınıza sığınıyorum ama beceremedim
ile mainmenüye alıyorum ama __.OnClick:=menuclick(sender); i anlamdım
Bu neyin OnClick olayı

Kod: Tümünü seç
var
mnuLevel: array [0..9] of TMenuItem;
mnuAddItem: TMenuItem;
basla,sayi: integer;
begin
sayi:=listbox1.count;
for basla:=0 to sayi-1 do
begin
mnuLevel[0] := mainmenu1.Items[6];
mnuAddItem := TMenuItem.Create(MainMenu1);
mnuAddItem.Caption := listbox1.Items.Strings[basla];
mnuLevel[0].Add(mnuAddItem);
end;
ile mainmenüye alıyorum ama __.OnClick:=menuclick(sender); i anlamdım

Simdi OnClick olayı denen sey, runtime'da eklediginiz MenuItemlerin eventleri icin procedure. Yani sizin belirttiginiz koddaki Listboxda olan stringlerin MainMenu 6 itemine ekledigimizde, eger kullanıcı MainMenuden bu itemlerin herhangi birine tıklarsa gonderilecek eventi belirliyoruz.
eger burda isterseniz eklediginiz menuitemlerin eventlerine tek tek procedure yazarakta olusturabilirsiniz, veya benim yaptigim gibi MenuItemClick_Center tek procedure yazıp runtimeda ekledim butun itemleri bu procedure gonderebilirsiniz.
Peki hangi iteme tiklandigini nasil anlayacagim?
- Isterseniz captionlardan veya runtimeda counterin verdigi tag degerlerinden gidebilirsiniz. Tavsiyem tag degerlerini kullanarak karsilastirma yapmaniz yonunde.
===============================
Source kodun tamami bu sekilde,
Kod: Tümünü seç
Var
mnuLevel: Array[0..9] Of TMenuItem;
mnuAddItem: TMenuItem;
basla, sayi: integer;
Begin
sayi := listbox1.count;
mainmenu1.Items[6].Clear;
For basla := 0 To sayi - 1 Do
Begin
mnuLevel[6] := mainmenu1.Items[6];
mnuAddItem := TMenuItem.Create(MainMenu1);
mnuAddItem.Caption := listbox1.Items.Strings[basla];
mnuAddItem.OnClick := MenuItemClick_Center;
mnuAddItem.Tag := basla;
mnuLevel[6].Add(mnuAddItem);
End;
End;
Peki hangi iteme tiklandigini nasil anlayacagim?
- Isterseniz captionlardan veya runtimeda counterin verdigi tag degerlerinden gidebilirsiniz. Tavsiyem tag degerlerini kullanarak karsilastirma yapmaniz yonunde.
Kod: Tümünü seç
Procedure TForm1.MenuItemClick_Center(Sender: TObject);
Begin
edit1.text := TMenuitem(Sender).Caption;
Case TMenuitem(Sender).Tag Of
0: edit2.text := 'Tıklanan MenuItem = ' + TMenuitem(Sender).Caption;
1: edit2.text := 'Tıklanan MenuItem = ' + TMenuitem(Sender).Caption;
2: edit2.text := 'Tıklanan MenuItem = ' + TMenuitem(Sender).Caption;
End;
End;
Source kodun tamami bu sekilde,
Kod: Tümünü seç
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;
Type
TForm1 = Class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
MainMenu1: TMainMenu;
ListBox1: TListBox;
Procedure Button1Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
Private
Procedure MenuItemClick_Center(Sender: TObject);
{ Private declarations }
Public
{ Public declarations }
End;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
Procedure TForm1.MenuItemClick_Center(Sender: TObject);
Begin
edit1.text := TMenuitem(Sender).Caption;
Case TMenuitem(Sender).Tag Of
0: edit2.text := 'Tıklanan MenuItem = ' + TMenuitem(Sender).Caption;
1: edit2.text := 'Tıklanan MenuItem = ' + TMenuitem(Sender).Caption;
2: edit2.text := 'Tıklanan MenuItem = ' + TMenuitem(Sender).Caption;
End;
End;
Procedure TForm1.Button1Click(Sender: TObject);
Var
mnuLevel: Array[0..9] Of TMenuItem;
mnuAddItem: TMenuItem;
basla, sayi: integer;
Begin
sayi := listbox1.count;
mainmenu1.Items[6].Clear;
For basla := 0 To sayi - 1 Do
Begin
mnuLevel[6] := mainmenu1.Items[6];
mnuAddItem := TMenuItem.Create(MainMenu1);
mnuAddItem.Caption := listbox1.Items.Strings[basla];
mnuAddItem.OnClick := MenuItemClick_Center;
mnuAddItem.Tag := basla;
mnuLevel[6].Add(mnuAddItem);
End;
End;
Procedure TForm1.FormCreate(Sender: TObject);
Var
mnuItem: TMenuItem;
i:Integer;
Begin
ListBox1.Items.Clear;
ListBox1.Items.Add('Narc');
ListBox1.Items.Add('The Bourne Supremacy');
ListBox1.Items.Add('Children of Men');
ListBox1.Items.Add('Crank');
ListBox1.Items.Add('Laws of Attraction');
For i := 0 To 6 Do Begin
mnuItem := TMenuItem.Create(MainMenu1);
mnuItem.Caption := 'Deneme '+IntToStr(i);
mainmenu1.Items.Add(mnuItem);
End;
End;
End.
Z.D açıklaman için sağolasın.Edit2 ye gelen items şu şekilde geliyor.
veya
burda items numarasına göre & işareti klasör adının içindeki satırda yer alıyor
örneğin
0: &Yeni Klasör
1: Y&eni Klasör
2: Ye&ni Klasör
3: Yen&i Klasör şeklinde
kodundaki edit1.text := TMenuitem(Sender).Caption a bir anlam veremedim zaten itemsleri edit2 ye almıyormuyuz.Teşekkürler
Kod: Tümünü seç
Tıklanan MenuItem = &2006-2007_1.Dönem
Kod: Tümünü seç
Tıklanan MenuItem = Kop&yası (5) Yeni Klasör
Kod: Tümünü seç
Tıklanan MenuItem = &Kopyası (2) Yeni Klasör
Kod: Tümünü seç
Tıklanan MenuItem = Ye&ni Klasör
örneğin
0: &Yeni Klasör
1: Y&eni Klasör
2: Ye&ni Klasör
3: Yen&i Klasör şeklinde
Kod: Tümünü seç
Begin
edit1.text := TMenuitem(Sender).Caption;
Case TMenuitem(Sender).Tag Of
Eğer tek sorun & işareti ise onu da çıkart aradan.
yukarıdaki gibi bir kod ile string ifade içindeki & işaretini silebilirsin. Parametrelerin yerlerini yazmış olabilirim. Ama bu şekilde halledebilirsin.
Kod: Tümünü seç
function temizle(stringifade:string):string;
var
a:integer;
begin
s:=pos('&',stringifade);
delete(stringidafe,a,1)
result:=stringifade;
end;
Kod: Tümünü seç
Build
[Error] Giris.pas(312): Undeclared identifier: 's'
[Error] Giris.pas(313): Undeclared identifier: 'stringidafe'
[Error] Giris.pas(313): Incompatible types
Hani @Z.D koduyla bir deneme yapmıştın ya, o denemeni aşağıdaki şekilde yap.
Kod: Tümünü seç
edit1.text := StringReplace( TMenuitem(Sender).Caption, '&', '', [rfReplaceAll]);