TMainMenu'yu program içerisinden TdxRibbon'a dönüştürme

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

TMainMenu'yu program içerisinden TdxRibbon'a dönüştürme

Mesaj gönderen csunguray »

Daha önce yazmış olduğumuz programlar DevExpress bileşenleri ile modernize ederken kullanabileceğimiz bir yordam. Yordam TMainMenu ana seçeneklerini TdxRibbonTab olarak oluşturur ve alt seçenekler için bir TdxRibbonTabGroup oluşturur. Eğer iç içe alt menüler varsa onlar için de ayrı bir TdxRibbonTabGroup oluşturur. Ben programlarımda Action kullandığım için TdxBarLargeButton'ların Action larını set ettim ama ihtiyacı olanlar Caption, Enabled, Hint, ShortCut, OnClick property'lerini tek tek set edebilirler.

Kod: Tümünü seç

procedure TForm1.MainMenuToRibbon(AMainMenu: TMainMenu; ARibbon: TdxRibbon; ABarManager: TdxBarManager);
var
  Int1: Integer;
  Tab1: TdxRibbonTab;
  Grp1: TdxRibbonTabGroup;
  Bar1: TdxBar;
  LButton1: TdxBarLargeButton;

  function ClearAmpersand(Str1: string): string;
  begin
    Str1 := StringReplace(Str1, '&&', '$#~', [rfReplaceAll]);
    Str1 := StringReplace(Str1, '&', '', [rfReplaceAll]);
    Str1 := StringReplace(Str1, '$#~', '&', [rfReplaceAll]);
    Result := Str1;
  end;

  procedure ConvertMenuItem(AMenuItem: TMenuItem; ATab: TdxRibbonTab);
  var
    Int2: Integer;
  begin
    if AMenuItem.IsLine then Exit;
    if AMenuItem.Count = 0 then Exit;
    if not AMenuItem.Enabled then Exit;
    if not AMenuItem.Visible then Exit;

    Bar1 := ABarManager.Bars.Add;
    Bar1.Caption := ClearAmpersand(AMenuItem.Caption);
    Bar1.DockingStyle := dsTop;
    Bar1.IsMainMenu := True;
    Bar1.Visible := True;
    for Int2 := 0 to AMenuItem.Count - 1 do
    begin
      if AMenuItem.Items[Int2].IsLine then Continue;
      if AMenuItem.Items[Int2].Count > 0 then Continue;
      LButton1 := ABarManager.AddItem(TdxBarLargeButton) as TdxBarLargeButton;
      LButton1.Category := 0;
      LButton1.Action := AMenuItem.Items[Int2].Action;
      Bar1.ItemLinks.Add(LButton1);
    end;
    Grp1 := Tab1.Groups.Add;
    Grp1.Caption := ClearAmpersand(AMenuItem.Caption);
    Grp1.ToolBar := Bar1;
    // Submenus
    for Int2 := 0 to AMenuItem.Count - 1 do ConvertMenuItem(AMenuItem.Items[Int2], ATab);
  end;

begin
  ARibbon.Tabs.Clear;
  ABarManager.Bars.Clear;
  for Int1 := 0 to AMainMenu.Items.Count - 1 do
  begin
    if (not AMainMenu.Items[Int1].Visible) or (not AMainMenu.Items[Int1].Enabled) then Continue;
    Tab1 := ARibbon.Tabs.Add;
    Tab1.Caption := ClearAmpersand(AMainMenu.Items[Int1].Caption);
    ConvertMenuItem(AMainMenu.Items[Int1], Tab1);
  end;
  Menu := nil;
end;
Anahtar kelimeler: DevExpress, TdxRibbon, TdxBarManager, TMainMenu
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla