"Links" in Anwendung, wie im Windows Explorer
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
danielosBetreff: "Links" in Anwendung, wie im Windows Explorer |
Mo, Sep 29, 2008 16:52 Antworten mit Zitat |
|
---|---|---|
Moin!
Wenn man unter Windows einen Ornder öffnet, sieht man an der linken Seite standardmäßig Verlinkungen, wie z.B unter "Andere Orte:" "Eigene Dateien", "Arbeitsplatz", usw.... Da ich das Prinzip ganz hübsch finde, wäre meine Frage, wie sich das in einer Anwendung am besten realisieren ließe... Ich will damit Routinen innerhalb meines Progs aufrufen, sozusagen als Button-Ersatz... Hat jemand vorschläge, wie man das lösen könnte (Panels ? Canvas ? ...) MfG Daniel |
||
jsp |
Mo, Sep 29, 2008 17:40 Antworten mit Zitat |
|
---|---|---|
Eigentlich sind da der Kreativitaet kaum Grenzen gesetzt...
Ein Panel wuerde ich einem Canvas aber immer vorziehen, weil es vom System verwaltet wird, es sei denn du musst darin zeichnen, dann ist ein Canvas natuerlich einfacher. Code: [AUSKLAPPEN] CreatePanel:TGadget(10,10,80,80,Window:TGadget,PANEL_ACTIVE,"PlainPanel1") Nur dran denken das man das Panel auf ACTIVE schaltet um die Events zu bekommen.
Ab MaxGuiEx kann man aber auch Pixmaps auf Buttons setzen und den Text abschalten, fuer einfache Sachen reicht das vielleicht schon aus. Code: [AUSKLAPPEN] Local Button1:TGadget = CreateButton:TGadget("Button1",26,23,75,23,Window1:TGadget,BUTTON_PUSH)
Local Pixmap_Button1:TPixmap = LoadPixmapPNG:TPixmap ( "MyPixmap.png" ) SetGadgetPixmap( Button1:TGadget , Pixmap_Button1:TPixmap ,GADGETPIXMAP_ICON|GADGETPIXMAP_NOTEXT ) Ich habe fuer meinen Gui Editor mal ein Image Button modul geschrieben, das z.B. nur mit Panels arbeitet. Eine Demo kann man sich hier mal ansehen: http://jsp.logiczone.de/downlo...emo1.2.zip mfg -jsp- |
||
Logic Gui Professional a Gui Designer for MaxGui |
kog |
Mo, Sep 29, 2008 17:41 Antworten mit Zitat |
|
---|---|---|
Mit der neuen Version von MaxGUI, sollte ein Modul mitgeliefert werden, namens: ProxyGadgets oder sowas.
Schau im Ordner MaxGUI.mod. Aber ist glaube ich momentan nur für Windows verfügbar. Vielleicht hilft dir das weiter... |
||
FOODy |
Mo, Sep 29, 2008 17:48 Antworten mit Zitat |
|
---|---|---|
@kog:
MaxGUI.ProxyGadgets nutzt nur die Standardgadgets, was es Plattformunabhängig macht. @danielos: Wie kog bereits gesagt hat, könntest du das Hyperlink Gadget vom MaxGUI.ProxyGadgets Module benutzen. ( CreateHyperlink( url$,x,y,w,h,group:TGadget,style=0,customtext$ = "" ) ) Grüße, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
danielos |
Mo, Sep 29, 2008 19:47 Antworten mit Zitat |
|
---|---|---|
besten dank für die ganzen antworten, tolles forum hier
werd mich mal drauf stürzen.... MfG Danielos |
||
danielos |
Mo, Sep 29, 2008 19:53 Antworten mit Zitat |
|
---|---|---|
also, proxygadgets ist vom prinzip her genau das richtige, aber wie krieg ich es hin, dass keine webseite aufgerufen wird ?
wenn man für url$ = "" eingibt, öffnet sich der AppOrdner, in dem das programm ausgeführt wird... kann man iwie ein event beim klick auf den link erzeugen und das dann abgreifen ? |
||
d-bug |
Mo, Sep 29, 2008 20:31 Antworten mit Zitat |
|
---|---|---|
Schau die mal das Proxygadget an! Die Aufrufe werden über einen EventHook verwaltet! Ich schlage vor, du machst dir ein neues Hyperlinkgadget und ersetzt den OpenUrl Aufruf durch den Aufruf einer Callback Function oder so! Das ist alles aber schon etwas fortgeschrittener. Ach warte mal, ich friemel mal was zusammen!
So, getan... Aber bitte auch versuchen zu verstehen! Code: [AUSKLAPPEN] Strict
Import maxgui.drivers Function MyFunction () Print "Hallo, ich bin der Callback und du hast mich aktiviert" End Function Local Window:TGadget = CreateWindow ("Hyperlink-Callback-Test",100,100,200,200,Desktop()) Local HyperTest:TGadget = CreateMyHyperLink ("www.blitzforum.de",10,10,200,20,Window,0,"BlitzBasicPortal-Callback", MyFunction) Local HyperTest2:TGadget = CreateMyHyperLink ("www.blitzforum.de",10,30,200,20,Window,0,"BlitzBasicPortal-RealLink",Null) Repeat Select WaitEvent () Case EVENT_WINDOWCLOSE End End Select Forever End Rem bbdoc: Creates a basic hyperlink gadget that opens the specified @url$ in the default browser when clicked. about: The underlying gadget is a label, and so the @style parameter can take all the #CreateLabel flags apart from LABEL_SEPARATOR. The normal and roll-over text color can be set individually using #SetGadgetTextColor and #SetGadgetColor respectively. The optional @customtext$ parameter allows you to set user-friendly text that masks the URL in the label. If this is specified in #CreateHyperlink then the label's tooltip is automatically set to the URL the link refers to. This masking text can be changed at any time by calling #SetGadgetText. Finally, the @url$ that the hyperlink gadget opens can be modified/retrieved using #SetGadgetExtra and String( #GadgetExtra ) respectively (see code example). End Rem Function CreateMyHyperlink:TGadget( url$,x,y,w,h,group:TGadget,style=0,customtext$ = "", CallBack () = Null) Local Gadget:TMyHyperlinkGadget = New TMyHyperlinkGadget.Create(url,x,y,w,h,group,style,customtext) Gadget.CallBack = CallBack Return Gadget EndFunction Type TMyHyperlinkGadget Extends TProxyGadget Global lstHyperlinkGadgets:TList Global fntDefault:TGuiFont, fntHoverDefault:TGuiFont Field hyperlinkstyle% Field colors[][] = [[0,0,255],[255,0,0]] Field lastclick[] = [-1, -1] Field Callback() Method New() If Not lstHyperlinkGadgets Then Initialize() EndMethod Method Create:TMyHyperlinkGadget(pUrl$,x,y,w,h,group:TGadget,style,customtext$) If Not customtext Then customtext = pUrl$ If (style&LABEL_SEPARATOR) = LABEL_SEPARATOR Then style:&~LABEL_SEPARATOR Local tmpLabel:TGadget = CreateLabel( customtext, x, y, w, h, group, style&31 ) If Not tmpLabel Then Return Null Else SetGadgetSensitivity(tmpLabel, SENSITIZE_MOUSE) SetGadgetFont(tmpLabel,fntDefault) If customtext <> pUrl Then SetGadgetToolTip( tmpLabel, pUrl ) SetProxy( tmpLabel );Super.SetTextColor(colors[0][0], colors[0][1], colors[0][2]) hyperlinkstyle = style;extra = pUrl lstHyperlinkGadgets.AddLast Self Self.Callback = Callback Return Self EndMethod Method EventHook:TEvent( pEvent:TEvent ) Select pEvent.id Case EVENT_MOUSEENTER Super.SetTextColor(colors[1][0], colors[1][1], colors[1][2]);SetPointer(POINTER_HAND) Super.SetFont( fntHoverDefault ) Case EVENT_MOUSELEAVE Super.SetTextColor(colors[0][0], colors[0][1], colors[0][2]);SetPointer(POINTER_DEFAULT) Super.SetFont( fntDefault ) Case EVENT_MOUSEDOWN If lastclick[0] <> pEvent.x Or lastclick[1] <> pEvent.y lastclick = [pEvent.x,pEvent.y] '----------------------------------------------------- ' Callback aufrufen wenn vorhanden sonst Hyperlink '----------------------------------------------------- If Self.Callback Self.Callback () Else OpenURL(String(extra)) EndIf EndIf EndSelect Return Null EndMethod Method SetFont( font:TGuiFont ) fntDefault = font;fntHoverDefault = font Super.SetFont(font) EndMethod Method SetColor(r,g,b) colors[1][0] = r;colors[1][1] = g;colors[1][2] = b EndMethod Method SetTextColor(r,g,b) colors[0][0] = r;colors[0][1] = g;colors[0][2] = b Super.SetTextColor(colors[0][0], colors[0][1], colors[0][2]) EndMethod Method Free() lstHyperlinkGadgets.Remove(Self) Super.Free() EndMethod Function Initialize() lstHyperlinkGadgets = New TList AddHook EmitEventHook, eventHandler, Null, 1 fntDefault = LookupGuiFont( GUIFONT_SYSTEM, 0, 0 ) fntHoverDefault = LookupGuiFont( GUIFONT_SYSTEM, 0, FONT_UNDERLINE ) EndFunction Function eventHandler:Object( pID%, pData:Object, pContext:Object ) Local pEvent:TEvent = TEvent(pData) If pEvent Then For Local tmpHyperlinkGadget:TMyHyperlinkGadget = EachIn lstHyperlinkGadgets If tmpHyperlinkGadget.proxy = pEvent.source Then Return tmpHyperlinkGadget.EventHook( pEvent ) Next EndIf Return pData EndFunction EndType |
||
- Zuletzt bearbeitet von d-bug am Di, Sep 30, 2008 7:05, insgesamt einmal bearbeitet
danielos |
Mo, Sep 29, 2008 20:37 Antworten mit Zitat |
|
---|---|---|
vielen dank d-bug, und ich versuche prinzipiell alles zu verstehen,
allerdings spuckt der compiller ne fehlermeldung aus: Zeile: hyperlinkstyle = style;extra = pUrl Fehler: identifier "extra" not found |
||
d-bug |
Mo, Sep 29, 2008 20:46 Antworten mit Zitat |
|
---|---|---|
Sollte aber nicht, denn das "extra" Object ist ein fester Bestandteil der TGadget Klasse, aus der wiederum TProxyGadget abgeleitet wurde!
Da ich aber nun kein Windows besitze kann ich da jetzt nicht bei gucken! Bei mir (OS-X) lief es so, wie ich es im letzten Post hier rein setzte! Sorry, hier muss ich mich wieder ausklinken! |
||
jsp |
Mo, Sep 29, 2008 21:46 Antworten mit Zitat |
|
---|---|---|
D-bug's code funktioniert bei mir -> Win XP!
Wenn dir ein einfacher label als link reicht probier mal folgendes: Code: [AUSKLAPPEN] SuperStrict Import maxgui.drivers Local Window1:TGadget = CreateWindow:TGadget("Window1",269,130,319,148,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS |WINDOW_CLIENTCOORDS ) Local Label1:TGadget = CreateLabel:TGadget("Oeffne Arbeitsplatz",22,30,106,17,Window1:TGadget,Null) SetGadgetSensitivity( Label1:TGadget,SENSITIZE_MOUSE ) Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE Select EventSource() Case Window1 Window1_WC( Window1:TGadget ) End Select Case EVENT_MOUSEDOWN Select EventSource() Case Label1 Label1_MD( Label1:TGadget , EventData() , Window1:TGadget ) End Select End Select Forever Function Window1_WC( Window:TGadget ) DebugLog "Window Window1 wants to be closed" End End Function Function Label1_MD( Label:TGadget , MouseButton:Int , Window:TGadget=Null , expanded:Int=True) DebugLog "Label Label1 detected Mouse Button "+ MouseButton +" pressed down" 'hier dein code einsetzen 'z.b. einen explorer oeffnen Local str:String If expanded Then str="/e," system_("explorer.exe "+str+"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}") 'Arbeitsplatz oeffnen End Function Ist vielleicht etwas einfacher am Anfang als ein Proxy Gadget. -jsp- |
||
Logic Gui Professional a Gui Designer for MaxGui |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group