BlitzPlus PopuMenü

Übersicht Sonstiges Projekte

Neue Antwort erstellen

Artemis

Betreff: BlitzPlus PopuMenü

BeitragMo, Mai 16, 2005 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi habs gerade eilig, möchte aber mein momentanes Projekt vorstellen.

Es ist ein PopupMenü für BlitzPlus Anwendungen.
Sie ist recht einfach mit nur wenigen Funktionen.

Artemis

BeitragDi, Mai 17, 2005 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier wie versprochen! (Nur für BlitzPlus)

Die Screenshots:
-----------------------------------------
user posted image
--------------------------------------------------------------------------------------------------------------------------------
user posted image
--------------------------------------------------------------------------------------------------------------------------------
Die decls:
[syntax:71e75f6ca6="PopupMenu_decls"].lib "user32.dll"
GetActiveWindow%()
.lib " "
CreatePopupMenu%()
DeletePopupMenu%(Menu_ID%)
ShowPopupMenu%(Menu_ID%)
SetPopupMenuIcons%(Menu_ID%,IconDatei$)
AddPopupMenuItem%(Menu_ID%,Name$,Icon%,Enabled%)[/syntax:71e75f6ca6]

Der Code:
BlitzBasic: [AUSKLAPPEN]
Global font = LoadFont(\"verdana\",14)
Type popup_menu
Field w,h
Field win
Field can
Field sub.popup_sub
Field icons
End Type

Type popup_sub
Field txt$
Field hot$
Field pos
Field parent
Field pos_px
Field on
Field icon
End Type

Function CreatePopupMenu()
Local pum.popup_menu = New popup_menu
pum\w = 5
pum\h = 5
pum\win = CreateWindow(\"\",pum\w,pum\h,pum\w,pum\h,Desktop(),16)
pum\can = CreateCanvas(0,0,pum\w,pum\h,pum\win)
HideGadget(pum\win)
Return Handle(pum)
End Function

Function DeletePopupMenu(Menu_ID)
Local pum.popup_menu = Object.popup_menu(Menu_ID)
If pum = Null Then Return -2
For pum\sub = Each popup_sub
If pum\sub\parent = pum\win Then Delete pum\sub
Next
FreeGadget(pum\can)
FreeGadget(pum\win)
End Function

Function AddPopupMenuItem(Parent_ID,Name$,icon=-1,on=1)
Local pum.popup_menu = Object.popup_menu(Parent_ID)
If pum = Null Then Return -2
Local id_s = 0
Local id_m = 0
Local ret$
For pum\sub = Each popup_sub
id_s = id_s + 1
Next
For pum = Each popup_menu
id_m = id_m + 1
Next
pum.popup_menu = Object.popup_menu(Parent_ID)
pum\sub.popup_sub = New popup_sub
If Instr(name$,Chr(9)) Then
pum\sub\txt$ = Left(Name$,Instr(name$,Chr(9))-1)
pum\sub\hot$ = Mid(name$,Instr(name$,Chr(9))+1)
Else
pum\sub\txt$ = Name$
EndIf
pum\sub\pos = id_s
pum\sub\parent = pum\win
pum\sub\on = on
pum\sub\icon = icon
If Len(Str$(id_s)) = 1 Then
ret$ = Str$(id_m)+\"0\"+Str$(id_s)
EndIf
If Len(Str$(id_s)) = 2 Then
ret$ = Str$(id_m)+Str$(id_s)
EndIf
Return Int(ret$)
End Function

Function ShowPopupMenu(Menu_ID,x,y,mode=1)
Local pum.popup_menu = Object.popup_menu(Menu_ID)
If pum = Null Then Return -2
ShowGadget(pum\win)
hwnd = GetActiveWindow()
SetBuffer(CanvasBuffer(pum\can))
SetFont(font)
Local length
Local hot_l = 0
Local height
Local y_show
For pum\sub = Each popup_sub
If pum\sub\parent = pum\win Then
If StringWidth(pum\sub\txt$) > length Then length = StringWidth(pum\sub\txt$)
If pum\sub\hot$ <> \"\" Then
If StringWidth(pum\sub\hot$) > hot_l Then hot_l = StringWidth(pum\sub\hot$)
EndIf
If pum\sub\txt$ = \"\" Then
height = height + 5
Else
height = height + FontHeight()+6
EndIf
EndIf
Next
length = length + 24 + hot_l + 10 + 20
height = height + 10
pum\w = length
pum\h = height
FreeGadget(pum\can)
SetGadgetShape(pum\win,x,y,pum\w,pum\h)
pum\can = CreateCanvas(0,0,pum\w,pum\h,pum\win)
Local img = CreateImage(pum\w,pum\h)
SetBuffer(ImageBuffer(img))
SetFont(font)
Color 170,170,170
Rect 0,0,pum\w,pum\h
Color 255,255,255
Rect 2,2,pum\w-4,pum\h-4
y_show = 5
For pum\sub = Each popup_sub
If pum\sub\parent = pum\win Then
If pum\sub\txt$ = \"\" Then
Color 170,170,150
Line 7,y_show,pum\w-7,y_show
y_show = y_show + 5
pum\sub\pos_px = -(FontHeight()+5)
Else
If pum\sub\on = 1 Then
Color 0,0,0
Else
Color 170,170,150
EndIf
Text 27,y_show,pum\sub\txt$
Text 27+length-44-hot_l,y_show,pum\sub\hot$
pum\sub\pos_px = y_show
y_show = y_show + FontHeight()+6
If pum\sub\icon <> -1 Then DrawImage(pum\icons,7,pum\sub\pos_px,pum\sub\icon)
EndIf
EndIf
Next
SetBuffer(CanvasBuffer(pum\can))
SetFont(font)
Repeat
DrawBlock(img,0,0)
If (MouseX(pum\can)>2) And (MouseX(pum\can)<pum\w-4) Then
For pum\sub = Each popup_sub
If MouseY(pum\can) > pum\sub\pos_px-2 Then
If MouseY(pum\can) < pum\sub\pos_px+FontHeight()+4 Then
Color 50,100,200
Rect 3,pum\sub\pos_px-2,pum\w-6,FontHeight()+6
If pum\sub\on = 1 Then
Color 255,255,255
Else
Color 170,170,150
EndIf
Text 27,pum\sub\pos_px,pum\sub\txt$
Text 27+length-44-hot_l,pum\sub\pos_px,pum\sub\hot$
If pum\sub\icon <> -1 Then DrawImage(pum\icons,7,pum\sub\pos_px,pum\sub\icon)
If MouseDown(1) Then
HideGadget(pum\win)
Return pum\sub\pos
EndIf
EndIf
EndIf
Next
EndIf
FlipCanvas(pum\can)
If GetActiveWindow()<>hwnd Then Exit
Until KeyHit(0)
HideGadget(pum\win)
Return -1
End Function

Function SetPopupMenuIcons(Menu_ID,Datei$)
Local pum.popup_menu = Object.popup_menu(Menu_ID)
If pum = Null Then Return -2
Local img = LoadImage(Datei$,2)
If img = 0 Then Return -1
SetBuffer(ImageBuffer(img))
width = ImageWidth(img)
height = ImageHeight(img)
FreeImage(img)
Local frames% = width/height
pum\icons = LoadAnimImage(Datei$,height,height,0,frames,2)
MaskImage(pum\icons,255,0,255)
If pum\icons <> 0 Then Return 1
Return -2
End Function


Hier ein Beispiel:
BlitzBasic: [AUSKLAPPEN]
lol = CreatePopupMenu()
SetPopupMenuIcons(lol,\"icons.bmp\")
AddPopupMenuItem(lol,\"Cut Str+X\",-1,0)
AddPopupMenuItem(lol,\"Copy Str+C\")
AddPopupMenuItem(lol,\"Paste Str+V\")
AddPopupMenuItem(lol,\"\")
AddPopupMenuItem(lol,\"Show Toolbar? Shift+Esc\",-1,0)

ShowPopupMenu(lol,100,100)
DeletePopupMenu(lol)
End
 

ChristianH

BeitragDi, Mai 17, 2005 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~


Wenn es ein Projekt ist gehört es hierrein.

ganxta

Artemis

BeitragDi, Mai 17, 2005 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ganxta hat Folgendes geschrieben:
~VERSCHOBEN~

Wollte grad noch posten, ob es ein mod verschieben kann!

rema

BeitragDi, Mai 17, 2005 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht gut aus! Super Idee!

Artemis

BeitragDi, Mai 17, 2005 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Worklog:
- Untermenüs
- Tastaturauswahl (Shortcuts)

Artemis

BeitragDi, Mai 17, 2005 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat noch jemand ne Idee?

DA

BeitragDi, Mai 17, 2005 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

Sry aber es gibt so einen kleinen Edit button oben rechts bei deinem Posting. Dort kannst du deinen Post Editieren. Doppelposts sind hier nämlich nicht gerne erwünscht. Wink

Also gefallen tuts mir schonmal.
Aber ich finde es sieht ein bischen unecht aus.
Vieleicht kannst du nochmal was mit den Hintergrundfarben machen?

Thx
DarkAngel
Deutscher Blitz Basic Chat

Artemis

BeitragDi, Mai 17, 2005 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
@DarkAngel

Sorry wegen dem Doppelpost!

Du meinst ich soll wie bei windoof so einen kleinen shatten machen?

DA

BeitragDi, Mai 17, 2005 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

Ja. Aber auch diese komischen Hufeisen dinger da sind mir fremd. Smile
Ich denke es soll ja einem richtigen PopUpMenü ähneln oder?

Thx
DarkAngel
Deutscher Blitz Basic Chat
 

x.Force

BeitragDi, Mai 17, 2005 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ich denke mal das man die icons selbst wählen kann Wink

AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT

Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.-

simi

BeitragMi, Mai 18, 2005 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also ersteinmal, sieht sehr gut aus.....
Aber warum die decls, die brauchts ja gar nicht..... (ausser getactiveWindow)
Und sonst, ich denke, es geht einfacher mit WinAPI, da hast du auch noch original Windows-Style.....

Artemis

BeitragMi, Mai 18, 2005 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
simi hat Folgendes geschrieben:
Aber warum die decls, die brauchts ja gar nicht..... (ausser getactiveWindow)

Zum higlighten von denf funktionen!
simi hat Folgendes geschrieben:

Und sonst, ich denke, es geht einfacher mit WinAPI, da hast du auch noch original Windows-Style.....
Jaja, ich wollte das mal selber machen! hab ja nicht gesagt, dass das anders geht!
DarkAngel hat Folgendes geschrieben:
Aber auch diese komischen Hufeisen dinger da sind mir fremd

Das sind die Icons! selbst zu wählen mit "SetPopupMenuIcons"!

Artemis

BeitragDo, Mai 19, 2005 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
simi hat Folgendes geschrieben:
Und sonst, ich denke, es geht einfacher mit WinAPI, da hast du auch noch original Windows-Style.....


Wie denn, was für Funktionen?
Ich hab bisher noch nix gefunden!(bzw. nix mit ner erklärung, wie das ungefähr funzt!)

simi

BeitragSa, Mai 21, 2005 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit diesem code:
Code: [AUSKLAPPEN]

.lib "user32.dll"
CreatePopupMenu%()
DestroyMenu(h)
InsertMenuItem%(hMenu,uItem,fByPosition, lpmii*):"InsertMenuItemA"
TrackPopupMenuEx%(hMenu,wFlags,x,y,HWnd,lptpm)
CheckMenuItem(hmenu,uIDCheckItem,uCheck)
EnableMenuItem(hMenu,uIDEnableItem,uEnable   )
DeleteMenu(hMenu,uPosition,uFlags   )
GetMenuItemInfo(hMenu,uItem,fByPosition,lpmii*)


Mit diesem kann man relativ einfach ein menu erstellen, allerdings habe ich gerade gemerkt dass das bei der neusten BB-Version nicht mehr geht, mal schauen.....

cu simi

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group