property Item.ShowPopupOffset as String
Specifies the offset (horizontal,vertical) to display the item's submenu/popup relative to its default position.

TypeDescription
String A String expression that specifies  the offset as a pair (horizontal, vertical) to display the item's submenu/popup relative to its default position. 

The horizontal/vertical can be one of the following:

  • number, indicating the x,y-offset relative to default position of the drop down panel. The number can be can be followed by a D character which indicates that the coordinate is giving in dots, rather than pixels, and depends on the current DPI settings. For instance, ShowPopupOffset = "12D,12D", indicates that the inner popup is moved by 18,18 pixels if the DPI settings is 150%, while if DPI settings is 100% the popup is moved by 12,12 pixels, relative to its current position. The numberD converted in pixels is number * DPI / 100.
  • number:control, indicating the x,y-offset relative to control.
  • number:screen, indicating the x,y-absolute position on the screen.
By default, the ShowPopupOffset property is empty ( equivalent with the "0,0" ). The ShowPopupOffset property specifies the offset as a pair (horizontal,vertical) to display the item's submenu/popup relative to its default position/control or screen. Use the ShowPopupAt property to specify the identifier of the item where the current item's submenu/popup is displayed.

For instance, the following sample, displays the item's drop down relative to the control ( call ShowPopupOffset ):

With Ribbon1
	.PopupAppearance = ShadowBorder
	With .Items
		With .Add("Popup <b>1",2,100)
			.ShowPopupArrow = False
			.ShowPopupAlign = exShowPopupAlignDown
			.ShowPopupOffset = "0,0:control"
			With .Items
				.Add "Item 1"
				.Add "Item 2"
				.Add "Item 3"
			End With
		End With
		With .Add("Popup <b>2",2,200)
			.GroupPopup = exGroupPopup
			With .Items
				.Add "Item 2"
				.Add "Item 3"
				.Add "Item 4"
			End With
		End With
	End With
	.Refresh 
End With

and we get:

while following sample displays the item's drop down at its default position ( no ShowPopupOffset call, default ):

With Ribbon1
	.PopupAppearance = ShadowBorder
	With .Items
		With .Add("Popup <b>1",2,100)
			.ShowPopupArrow = False
			.ShowPopupAlign = exShowPopupAlignDown
			.ShowPopupOffset = "0,0:control"
			With .Items
				.Add "Item 1"
				.Add "Item 2"
				.Add "Item 3"
			End With
		End With
		With .Add("Popup <b>2",2,200)
			.GroupPopup = exGroupPopup
			With .Items
				.Add "Item 2"
				.Add "Item 3"
				.Add "Item 4"
			End With
		End With
	End With
	.Refresh 
End With

and we get:

How can I display the drop down popup to a different position?

VBA (MS Access, Excell...)

With Ribbon1
	With .Items
		With .Add("Popup",2,100)
			.ShowPopupAlign = 1
			.ShowPopupArrow = False
			.ShowPopupOffset = "-12,-48"
			With .Items
				.PopupAppearance = 3
				.Add "Item 1"
				.Add "Item 2"
				.Add "Item 3"
			End With
		End With
	End With
	.Refresh 
End With

VB6

With Ribbon1
	With .Items
		With .Add("Popup",2,100)
			.ShowPopupAlign = exShowPopupAlignDown
			.ShowPopupArrow = False
			.ShowPopupOffset = "-12,-48"
			With .Items
				.PopupAppearance = RaisedBorder
				.Add "Item 1"
				.Add "Item 2"
				.Add "Item 3"
			End With
		End With
	End With
	.Refresh 
End With

VB.NET

With Exribbon1
	With .Items
		With .Add("Popup",2,100)
			.ShowPopupAlign = exontrol.EXRIBBONLib.ShowPopupAlignEnum.exShowPopupAlignDown
			.ShowPopupArrow = False
			.ShowPopupOffset = "-12,-48"
			With .Items
				.PopupAppearance = exontrol.EXRIBBONLib.AppearanceEnum.RaisedBorder
				.Add("Item 1")
				.Add("Item 2")
				.Add("Item 3")
			End With
		End With
	End With
	.Refresh()
End With

VB.NET for /COM

With AxRibbon1
	With .Items
		With .Add("Popup",2,100)
			.ShowPopupAlign = EXRIBBONLib.ShowPopupAlignEnum.exShowPopupAlignDown
			.ShowPopupArrow = False
			.ShowPopupOffset = "-12,-48"
			With .Items
				.PopupAppearance = EXRIBBONLib.AppearanceEnum.RaisedBorder
				.Add("Item 1")
				.Add("Item 2")
				.Add("Item 3")
			End With
		End With
	End With
	.Refresh()
End With

C++

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXRIBBONLib' for the library: 'ExRibbon 1.0 Control Library'

	#import <ExRibbon.dll>
	using namespace EXRIBBONLib;
*/
EXRIBBONLib::IRibbonPtr spRibbon1 = GetDlgItem(IDC_RIBBON1)->GetControlUnknown();
EXRIBBONLib::IItemsPtr var_Items = spRibbon1->GetItems();
	EXRIBBONLib::IItemPtr var_Item = var_Items->Add(L"Popup",long(2),long(100));
		var_Item->PutShowPopupAlign(EXRIBBONLib::exShowPopupAlignDown);
		var_Item->PutShowPopupArrow(VARIANT_FALSE);
		var_Item->PutShowPopupOffset(L"-12,-48");
		EXRIBBONLib::IItemsPtr var_Items1 = var_Item->GetItems();
			var_Items1->PutPopupAppearance(EXRIBBONLib::RaisedBorder);
			var_Items1->Add(L"Item 1",vtMissing,vtMissing);
			var_Items1->Add(L"Item 2",vtMissing,vtMissing);
			var_Items1->Add(L"Item 3",vtMissing,vtMissing);
spRibbon1->Refresh();

C++ Builder

Exribbonlib_tlb::IItemsPtr var_Items = Ribbon1->Items;
	Exribbonlib_tlb::IItemPtr var_Item = var_Items->Add(L"Popup",TVariant(2),TVariant(100));
		var_Item->ShowPopupAlign = Exribbonlib_tlb::ShowPopupAlignEnum::exShowPopupAlignDown;
		var_Item->ShowPopupArrow = false;
		var_Item->ShowPopupOffset = L"-12,-48";
		Exribbonlib_tlb::IItemsPtr var_Items1 = var_Item->Items;
			var_Items1->PopupAppearance = Exribbonlib_tlb::AppearanceEnum::RaisedBorder;
			var_Items1->Add(L"Item 1",TNoParam(),TNoParam());
			var_Items1->Add(L"Item 2",TNoParam(),TNoParam());
			var_Items1->Add(L"Item 3",TNoParam(),TNoParam());
Ribbon1->Refresh();

C#

exontrol.EXRIBBONLib.Items var_Items = exribbon1.Items;
	exontrol.EXRIBBONLib.Item var_Item = var_Items.Add("Popup",2,100);
		var_Item.ShowPopupAlign = exontrol.EXRIBBONLib.ShowPopupAlignEnum.exShowPopupAlignDown;
		var_Item.ShowPopupArrow = false;
		var_Item.ShowPopupOffset = "-12,-48";
		exontrol.EXRIBBONLib.Items var_Items1 = var_Item.Items;
			var_Items1.PopupAppearance = exontrol.EXRIBBONLib.AppearanceEnum.RaisedBorder;
			var_Items1.Add("Item 1",null,null);
			var_Items1.Add("Item 2",null,null);
			var_Items1.Add("Item 3",null,null);
exribbon1.Refresh();

JScript/JavaScript

<BODY onload='Init()'>
<OBJECT CLASSID="clsid:DDF58CFA-750F-45E0-8A00-CFBE431702E2" id="Ribbon1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
function Init()
{
	var var_Items = Ribbon1.Items;
		var var_Item = var_Items.Add("Popup",2,100);
			var_Item.ShowPopupAlign = 1;
			var_Item.ShowPopupArrow = false;
			var_Item.ShowPopupOffset = "-12,-48";
			var var_Items1 = var_Item.Items;
				var_Items1.PopupAppearance = 3;
				var_Items1.Add("Item 1",null,null);
				var_Items1.Add("Item 2",null,null);
				var_Items1.Add("Item 3",null,null);
	Ribbon1.Refresh();
}
</SCRIPT>
</BODY>

VBScript

<BODY onload='Init()'>
<OBJECT CLASSID="clsid:DDF58CFA-750F-45E0-8A00-CFBE431702E2" id="Ribbon1"></OBJECT>

<SCRIPT LANGUAGE="VBScript">
Function Init()
	With Ribbon1
		With .Items
			With .Add("Popup",2,100)
				.ShowPopupAlign = 1
				.ShowPopupArrow = False
				.ShowPopupOffset = "-12,-48"
				With .Items
					.PopupAppearance = 3
					.Add "Item 1"
					.Add "Item 2"
					.Add "Item 3"
				End With
			End With
		End With
		.Refresh 
	End With
End Function
</SCRIPT>
</BODY>

C# for /COM

EXRIBBONLib.Items var_Items = axRibbon1.Items;
	EXRIBBONLib.Item var_Item = var_Items.Add("Popup",2,100);
		var_Item.ShowPopupAlign = EXRIBBONLib.ShowPopupAlignEnum.exShowPopupAlignDown;
		var_Item.ShowPopupArrow = false;
		var_Item.ShowPopupOffset = "-12,-48";
		EXRIBBONLib.Items var_Items1 = var_Item.Items;
			var_Items1.PopupAppearance = EXRIBBONLib.AppearanceEnum.RaisedBorder;
			var_Items1.Add("Item 1",null,null);
			var_Items1.Add("Item 2",null,null);
			var_Items1.Add("Item 3",null,null);
axRibbon1.Refresh();

X++ (Dynamics Ax 2009)

public void init()
{
	COM com_Item,com_Items,com_Items1;
	anytype var_Item,var_Items,var_Items1;
	;

	super();

	var_Items = exribbon1.Items(); com_Items = var_Items;
		var_Item = com_Items.Add("Popup",COMVariant::createFromInt(2),COMVariant::createFromInt(100)); com_Item = var_Item;
			com_Item.ShowPopupAlign(1/*exShowPopupAlignDown*/);
			com_Item.ShowPopupArrow(false);
			com_Item.ShowPopupOffset("-12,-48");
			var_Items1 = com_Item.Items(); com_Items1 = var_Items1;
				com_Items1.PopupAppearance(3/*RaisedBorder*/);
				com_Items1.Add("Item 1");
				com_Items1.Add("Item 2");
				com_Items1.Add("Item 3");
	exribbon1.Refresh();
}

Delphi 8 (.NET only)

with AxRibbon1 do
begin
	with Items do
	begin
		with Add('Popup',TObject(2),TObject(100)) do
		begin
			ShowPopupAlign := EXRIBBONLib.ShowPopupAlignEnum.exShowPopupAlignDown;
			ShowPopupArrow := False;
			ShowPopupOffset := '-12,-48';
			with Items do
			begin
				PopupAppearance := EXRIBBONLib.AppearanceEnum.RaisedBorder;
				Add('Item 1',Nil,Nil);
				Add('Item 2',Nil,Nil);
				Add('Item 3',Nil,Nil);
			end;
		end;
	end;
	Refresh();
end

Delphi (standard)

with Ribbon1 do
begin
	with Items do
	begin
		with Add('Popup',OleVariant(2),OleVariant(100)) do
		begin
			ShowPopupAlign := EXRIBBONLib_TLB.exShowPopupAlignDown;
			ShowPopupArrow := False;
			ShowPopupOffset := '-12,-48';
			with Items do
			begin
				PopupAppearance := EXRIBBONLib_TLB.RaisedBorder;
				Add('Item 1',Null,Null);
				Add('Item 2',Null,Null);
				Add('Item 3',Null,Null);
			end;
		end;
	end;
	Refresh();
end

VFP

with thisform.Ribbon1
	with .Items
		with .Add("Popup",2,100)
			.ShowPopupAlign = 1
			.ShowPopupArrow = .F.
			.ShowPopupOffset = "-12,-48"
			with .Items
				.PopupAppearance = 3
				.Add("Item 1")
				.Add("Item 2")
				.Add("Item 3")
			endwith
		endwith
	endwith
	.Refresh
endwith

dBASE Plus

local oRibbon,var_Item,var_Items,var_Items1

oRibbon = form.Activex1.nativeObject
var_Items = oRibbon.Items
	var_Item = var_Items.Add("Popup",2,100)
		var_Item.ShowPopupAlign = 1
		var_Item.ShowPopupArrow = false
		var_Item.ShowPopupOffset = "-12,-48"
		var_Items1 = var_Item.Items
			var_Items1.PopupAppearance = 3
			var_Items1.Add("Item 1")
			var_Items1.Add("Item 2")
			var_Items1.Add("Item 3")
oRibbon.Refresh()

XBasic (Alpha Five)

Dim oRibbon as P
Dim var_Item as P
Dim var_Items as P
Dim var_Items1 as P

oRibbon = topparent:CONTROL_ACTIVEX1.activex
var_Items = oRibbon.Items
	var_Item = var_Items.Add("Popup",2,100)
		var_Item.ShowPopupAlign = 1
		var_Item.ShowPopupArrow = .f.
		var_Item.ShowPopupOffset = "-12,-48"
		var_Items1 = var_Item.Items
			var_Items1.PopupAppearance = 3
			var_Items1.Add("Item 1")
			var_Items1.Add("Item 2")
			var_Items1.Add("Item 3")
oRibbon.Refresh()

Visual Objects

local var_Item as IItem
local var_Items,var_Items1 as IItems

var_Items := oDCOCX_Exontrol1:Items
	var_Item := var_Items:Add("Popup",2,100)
		var_Item:ShowPopupAlign := exShowPopupAlignDown
		var_Item:ShowPopupArrow := false
		var_Item:ShowPopupOffset := "-12,-48"
		var_Items1 := var_Item:Items
			var_Items1:PopupAppearance := RaisedBorder
			var_Items1:Add("Item 1",nil,nil)
			var_Items1:Add("Item 2",nil,nil)
			var_Items1:Add("Item 3",nil,nil)
oDCOCX_Exontrol1:Refresh()

PowerBuilder

OleObject oRibbon,var_Item,var_Items,var_Items1

oRibbon = ole_1.Object
var_Items = oRibbon.Items
	var_Item = var_Items.Add("Popup",2,100)
		var_Item.ShowPopupAlign = 1
		var_Item.ShowPopupArrow = false
		var_Item.ShowPopupOffset = "-12,-48"
		var_Items1 = var_Item.Items
			var_Items1.PopupAppearance = 3
			var_Items1.Add("Item 1")
			var_Items1.Add("Item 2")
			var_Items1.Add("Item 3")
oRibbon.Refresh()

Visual DataFlex

Procedure OnCreate
	Forward Send OnCreate
	Variant voItems
	Get ComItems to voItems
	Handle hoItems
	Get Create (RefClass(cComItems)) to hoItems
	Set pvComObject of hoItems to voItems
		Variant voItem
		Get ComAdd of hoItems "Popup" 2 100 to voItem
		Handle hoItem
		Get Create (RefClass(cComItem)) to hoItem
		Set pvComObject of hoItem to voItem
			Set ComShowPopupAlign of hoItem to OLEexShowPopupAlignDown
			Set ComShowPopupArrow of hoItem to False
			Set ComShowPopupOffset of hoItem to "-12,-48"
			Variant voItems1
			Get ComItems of hoItem to voItems1
			Handle hoItems1
			Get Create (RefClass(cComItems)) to hoItems1
			Set pvComObject of hoItems1 to voItems1
				Set ComPopupAppearance of hoItems1 to OLERaisedBorder
				Get ComAdd of hoItems1 "Item 1" Nothing Nothing to Nothing
				Get ComAdd of hoItems1 "Item 2" Nothing Nothing to Nothing
				Get ComAdd of hoItems1 "Item 3" Nothing Nothing to Nothing
			Send Destroy to hoItems1
		Send Destroy to hoItem
	Send Destroy to hoItems
	Send ComRefresh
End_Procedure

XBase++

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oItem
	LOCAL oItems,oItems1
	LOCAL oRibbon

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oRibbon := XbpActiveXControl():new( oForm:drawingArea )
	oRibbon:CLSID  := "Exontrol.Ribbon.1" /*{DDF58CFA-750F-45E0-8A00-CFBE431702E2}*/
	oRibbon:create(,, {10,60},{610,370} )

		oItems := oRibbon:Items()
			oItem := oItems:Add("Popup",2,100)
				oItem:ShowPopupAlign := 1/*exShowPopupAlignDown*/
				oItem:ShowPopupArrow := .F.
				oItem:ShowPopupOffset := "-12,-48"
				oItems1 := oItem:Items()
					oItems1:PopupAppearance := 3/*RaisedBorder*/
					oItems1:Add("Item 1")
					oItems1:Add("Item 2")
					oItems1:Add("Item 3")
		oRibbon:Refresh()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN