MainMenu ıtems click

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

MainMenu ıtems click

Mesaj gönderen haydarxxx »

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
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

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';
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

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

Kod: Tümünü seç

 
private
procedure menuClick(Sender: TObject);

.....


procedure menuClick(Sender: TObject);
begin
edit2.text:=TmenuItem.Items[6](sender).Caption;
end;
olmadı.Biraz daha açıklayıcı olabilirseniz sevinirim.Neyin onclick olayına atama yapacağız.teşekkürler
Kullanıcı avatarı
sTb
Üye
Mesajlar: 59
Kayıt: 06 Nis 2005 11:13
Konum: Eskişehir

Mesaj gönderen sTb »

@haydarxxx cevabın geçliği için kusura bakmayın.

@ng dediği gibi, menuye eklerken

Kod: Tümünü seç

__.OnClick:=menuclick(sender);
ile ilave ediniz.

ilgili procedure de;

Kod: Tümünü seç

procedure menuClick(Sender: TObject);
  begin
  showmessage(tmenuitem(Sender).Caption);
  end;
şeklinde olacaktır.
" Her bildiğin doğru olsun. Ama her doğruyu her yerde söylemek doğru değildir. "
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Arkadaşlar sabrınıza sığınıyorum ama beceremedim :oops:


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 :cry: Bu neyin OnClick olayı
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Mesaj gönderen Z.D. »

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.

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;
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.

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.


Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Z.D açıklaman için sağolasın.Edit2 ye gelen items şu şekilde geliyor.

Kod: Tümünü seç

Tıklanan MenuItem = &2006-2007_1.Dönem
veya

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
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

Kod: Tümünü seç

Begin
  edit1.text := TMenuitem(Sender).Caption;
  Case TMenuitem(Sender).Tag Of
kodundaki edit1.text := TMenuitem(Sender).Caption a bir anlam veremedim zaten itemsleri edit2 ye almıyormuyuz.Teşekkürler
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

arkadaşlar şu koda bir el atalım kaç gündür bir cevap gelir diye forumun başındayım gerçi her daim burdayım ama :) .help :idea:
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

Eğer tek sorun & işareti ise onu da çıkart aradan.

Kod: Tümünü seç

function temizle(stringifade:string):string;
var
  a:integer;
begin
  s:=pos('&',stringifade);
  delete(stringidafe,a,1)
result:=stringifade;
end;
yukarıdaki gibi bir kod ile string ifade içindeki & işaretini silebilirsin. Parametrelerin yerlerini yazmış olabilirim. Ama bu şekilde halledebilirsin.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

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
hatası alıyorum
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

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]);
Resim
Resim ....Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

sy mrmarman teşekkürler
Cevapla