Thema: Delphi Problem mit nonvcl Menu

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Problem mit nonvcl Menu

  Alt 30. Nov 2008, 15:43
leider werden die Namen nicht addiert..
Menü wird erstellt die einträge auch addiert aber die namen kann ich nicht sehn..

Delphi-Quellcode:
//Hier wird der Text für den Menu Eintrag übergeben
// und für diesen Eintrag zugehörige icon als *.png File 16x16
function GetMenuTxt(ItemId: Integer; var Img: Cardinal): string;
var
sItem: string;
begin
  with SkinEngine do
  begin
    case ItemId of
      IDM_Close:
       Result := 'Close SoundMachine';
      IDM_About:
        Result := 'About';
      IDM_PRESET:
        Result := 'Presets';
    end;

    case ItemId of
      IDM_Close:
        sItem := 'Close.png';
      IDM_About:
        sItem := 'About.png';
      IDM_PRESET:
        sItem := 'WMP.png';
    end;
    Img := AddResource(PAnsiChar(sExePath + 'Skin\' + sItem));
  end;

end;
Delphi-Quellcode:
BASSVISKIND_WMP:
begin
  nItem := LoWord(wP) - ID_VISUAL_FIRST + 1;
  PlgFilename := ListGetText(GetMainItem(ID_PlugList), nItem);
  PlgSelectedIndex := nItem;

  NumPresets := BASSVIS_GetModulePresetCount(
    @mVisParam, PChar(PlgFilename));
  If NumPresets > 1 Then
  begin
    hPopupMenu := CreatePopupMenu; // Bitmap Popupmenu
    if hPopupMenu <> 0 then
    begin
      AppendMenu(hPopupMenu, MF_OWNERDRAW, IDM_PRESET, '');
      AppendMenu(hPopupMenu, MF_SEPARATOR, 105, '');
      for IntI := 0 to NumPresets - 1 do
      begin
        WMPVisPreset := BASSVIS_GetModulePresetName(@mVisParam, IntI,
          PChar(PlgFilename));
        AppendMenu(hPopupMenu, MF_OWNERDRAW,
          (IDM_PRESET + 1) + IntI, WMPVisPreset);
      end;
      GetCursorPos(p);
      MenuWahl := TrackPopupMenuEx(hPopupMenu, TPM_RETURNCMD, p.X, p.Y, WinHandle, nil);
      DestroyMenu(hPopupMenu);
      if MenuWahl then
        SendMessage(WinHandle, WM_COMMAND, Makelong(Word(MenuWahl), 0), 0);
    end;
  end else
    PlgSelectedModule := 0;
end;
was hab ich vergessen ?
EDIT:
Habs jetzt geändert!
Delphi-Quellcode:
//Hier wird der Text für den Menu Eintrag übergeben
// und für diesen Eintrag zugehörige icon als *.png File 16x16
function GetMenuTxt(ItemId: Integer; var Img: Cardinal): string;
var
sItem: string;
begin
  with SkinEngine do
  begin
    case ItemId of
      IDM_Close:
       Result := 'Close SoundMachine';
      IDM_About:
        Result := 'About';
      IDM_PRESET..IDM_PRESET_LAST:
        Result := WMPVisPreset[ItemId - IDM_PRESET];

    end;

    case ItemId of
      IDM_Close:
        sItem := 'Close.png';
      IDM_About:
        sItem := 'About.png';
      IDM_PRESET..IDM_PRESET_LAST:
        sItem := 'WMP.png';
    end;
    Img := AddResource(PAnsiChar(sExePath + 'Skin\' + sItem));
  end;

end;
Delphi-Quellcode:
BASSVISKIND_WMP:
begin
  nItem := LoWord(wP) - ID_VISUAL_FIRST + 1;
  PlgFilename := ListGetText(GetMainItem(ID_PlugList), nItem);
  PlgSelectedIndex := nItem;

  NumPresets := BASSVIS_GetModulePresetCount(
    @mVisParam, PChar(PlgFilename));
  If NumPresets > 1 Then
  begin
    hPopupMenu := CreatePopupMenu; // Bitmap Popupmenu
    if hPopupMenu <> 0 then
    begin
      for IntI := 0 to NumPresets - 1 do
      begin
        SetLength(WMPVisPreset, NumPresets);
        WMPVisPreset[IntI] := BASSVIS_GetModulePresetName(@mVisParam, IntI,
          PChar(PlgFilename));
        AppendMenu(hPopupMenu, MF_OWNERDRAW,
          (IDM_PRESET + IntI), WMPVisPreset[IntI]);
      end;
      GetCursorPos(p);
      MenuWahl := TrackPopupMenuEx(hPopupMenu, TPM_RETURNCMD, p.X, p.Y, WinHandle, nil);
      DestroyMenu(hPopupMenu);
      if MenuWahl then
        SendMessage(WinHandle, WM_COMMAND, Makelong(Word(MenuWahl), 0), 0);
    end;
  end else
    PlgSelectedModule := 0;
end;
Jetzt werden die texte addiert allerdings bedingt durch IDM_PRESET_LAST = 120 als Const
habe ich nun mehr Einträge als ich verwende
Was gibt es da noch für eine möglichkeit.

EDIT:
Hat sich erledigt..
Habe bei IDM_PRESET_LAST zu wenig angegeben start 104 end 120 bei 20 plugins kann nicht funktionieren.
Raufgesetzt auf max 30 Plugins jetzt funktioniert es wie gewollt.

gruss Emil
Miniaturansicht angehängter Grafiken
ohne_titel-1_212.jpg  
  Mit Zitat antworten Zitat