AMIGA-RESISTANCE
https://forum.amiga-resistance.info/

Problem mit #SIMPLEBUTTON
https://forum.amiga-resistance.info/viewtopic.php?f=38&t=1675
Seite 1 von 2

Autor:  psd [ 18 Feb 2008, 22:39 ]
Betreff des Beitrags:  Problem mit #SIMPLEBUTTON

Hallo,

ich bastele mir gerade eine einfache Toolbar. Das Problem ist, dass die Buttons nur am untersten Rand auf den OnMouseUp-Event reagieren. Hier der Code, vielleicht mag es ja mal einer ausprobieren und/oder hat eine Idee dazu:
@VERSION 3, 0
@DISPLAY {
    Title = "HollyBar",
    X = #LEFT,
    Y = #TOP,
    Width = 32,
    Height = 32,
    Borderless = True,
    Sizeable = False,
    NoModeSwitch = True
}

Const #PREFSFILE = "HollyBar.prefs"

btnwidth  = 32
btnheight = 32
buttons   = {}

Function p_ReadPrefs()
    If Not Exists( #PREFSFILE )
        Error( "No preferences file found." )
    Else
        OpenFile( 1, #PREFSFILE, #MODE_READ )
        
        While Not Eof( 1 )
            line$ = ReadLine( 1 )

            If LeftStr( line$, 1 ) <> ';' And StrLen( line$ ) > 1
                TrimStr( line$, " ", True )
                TrimStr( line$, " ", False )
                InsertItem( buttons, line$ )
            EndIf
        Wend

        CloseFile( 1 )
    EndIf
EndFunction

Function p_MakeButtons()
    For index=1 To ListItems(buttons)
        posx = ( index - 1 ) * btnwidth
        posy = 0

        LoadBrush( index, buttons[index-1] .. ".info" )
        ScaleBrush( index, btnwidth, btnheight, True )
        DisplayBrush( index, posx, posy )

        MakeButton( index,
                    #SIMPLEBUTTON,
                    posx, posy,
                    btnwidth, btnheight,
                    evtmatch )
    Next
EndFunction

Function p_RunApp( msg )
    Run( buttons[msg.ID-1] )
EndFunction

evtmatch = { OnMouseUp = p_RunApp }

p_ReadPrefs()
ChangeDisplaySize( ListItems( buttons ) * btnwidth, btnheight+1, True )
p_MakeButtons()

While( quit = False )
    WaitEvent
Wend

End 
Dazu braucht es noch eine Datei "Hollybar.prefs, in der die zu startenden Programme (die .info-Files haben müssen) zeilenweise aufgeführt sind:
; HollyBar preferences
Cubic:Microgolded
Prog:Buero/MUIbase/Muibase 

Autor:  psd [ 19 Feb 2008, 00:18 ]
Betreff des Beitrags: 

Es scheint an Zeile 8 zu liegen (Borderless = True). Auskommentieren und gut ist.
Ich wurschtele das hier auf einem Pegasos zurecht. Kann das mal jemand mit OS3 oder OS4 testen?

Autor:  Clyde [ 19 Feb 2008, 07:40 ]
Betreff des Beitrags: 

Hey, super, klingt interessant. Schön auch, dass Du den Fehler (?) gefunden hast. Ist aber schon komisch, oder? Ich schau mir das heute Abend zu Hause nochmal an. Da teste ich das ganze dann auch unter OS3.9. Freu mich schon drauf!

EDIT: Ich finde auch Deinen Quelltext schön strukturiert und gut lesbar. *Daumenhoch* Ich fordere mehr solcher Quelltexte! 8)

MdG

Autor:  psd [ 19 Feb 2008, 09:08 ]
Betreff des Beitrags: 

Der Fehler tritt auch auf, wenn ich das Skript mit 'hollywood -borderless hollybar.hws' aufrufe. Scheint ein Bug zu sein. Liest Andreas hier mit oder gibt es einen Bugtracker? Wenn wir wissen, ob es nur unter MorphOS oder generell auftritt, wäre es einen Bugreport wert.

Was die Lesbarkeit angeht: Anfänger sollten unbedingt den passenden Abschnitt im Hollywood-Guide beherzigen: 4.6 Styleguide suggestions. Man tut sich (und vielleicht auch anderen) wirklich einen großen Gefallen damit.

Autor:  Clyde [ 19 Feb 2008, 09:13 ]
Betreff des Beitrags: 

psd hat geschrieben:
Der Fehler tritt auch auf, wenn ich das Skript mit 'hollywood -borderless hollybar.hws' aufrufe. Scheint ein Bug zu sein. Liest Andreas hier mit oder gibt es einen Bugtracker? Wenn wir wissen, ob es nur unter MorphOS oder generell auftritt, wäre es einen Bugreport wert.
Ich denke er hat nicht viel Zeit hier regelmäßig zu lesen. Und einen Bugtracker gibt es (meines Wissens nach) auch nicht. Das beste wäre es, das Problem entweder direkt an Andreas zu schicken oder an die Mailingliste. Da können es gleich andere testen und Andreas bekommt es auch mit.
Ein Bugtracker wäre aber vielleicht echt nicht schlecht, da man ihn ja auch für feature requests benutzen kann und so schön alles sammeln kann. Hm, müsste man mal bei ihm anfragen.
psd hat geschrieben:
Was die Lesbarkeit angeht: Anfänger sollten unbedingt den passenden Abschnitt im Hollywood-Guide beherzigen: 4.6 Styleguide suggestions. Man tut sich (und vielleicht auch anderen) wirklich einen großen Gefallen damit.
Dem kann ich nur 100%ig beipflichten!

Autor:  Clyde [ 19 Feb 2008, 22:51 ]
Betreff des Beitrags: 

Hey psd,

habe gerade versucht, Dein Programm unter OS3 zu compilieren, aber ich bekomme für folgende Zeile
If LeftStr( line$, 1 ) <And> 1 
folgende Fehlermeldung:
Zitat:
Zahlen können nicht mit Strings verglichen werden!
... Aktuelle Zeile: 28 - In Funktion: p_readprefs
Bin im Moment zu müde, um genau rauszufinden, was Du da machst. :-/ Aber vielleicht hilft Dir die Meldung? Habe auch schon verschiedenste Sachen mit der HollyBar.prefs probiert, die aktuelle Version, die ja auf alle Fälle gehen müsste, sieht so aus:
; HollyBar preferences
;Amikit:Programme/Cubic IDE
;Amikit:Programme/Designer
;Amikit:Programme/guideml
Amikit:Programme/Hollywood/GUI
Hatte erst auch die auskommentierten Pfad drin, aber da kam selbe Fehlermeldung. Ich dachte, es liegt vielleicht daran, dass es nur Ordner sind und keine Dateien, weswegen ich mal nur das HW-GUI-Prog eingefügt habe - aber wie Du siehst hat es nicht geholfen. :-(

Gute Nacht!

Autor:  psd [ 20 Feb 2008, 18:29 ]
Betreff des Beitrags: 

Danke für's Testen. Die in der Fehlermeldung angemeckerte Zeile wird von der Forensoftware nicht korrekt angezeigt.

Hier ein kurzes Skript, mit dem man den Fehler reproduzieren kann:
@VERSION 3, 0
@DISPLAY {
    Width = 200,
    Height = 100,
}

buttons   = {
    "left",
    "right"
}

Function p_Output( msg )
    DebugPrint( buttons[msg.ID-1] )
EndFunction

evtmatch = { OnMouseUp = p_Output, OnRightMouseUp = p_Output }

Box( 0, 0, 100, 100, #RED )
Box( 100, 0, 100, 100, #BLUE )

MakeButton( 1, #SIMPLEBUTTON, 0, 0, 100, 100, evtmatch )
MakeButton( 2, #SIMPLEBUTTON, 100, 0, 100, 100, evtmatch )

While( quit = False )
    WaitEvent
Wend

End 
Das Skript erzeugt ein Fenster mit zwei Buttons. Beim Links- oder Rechtsklick auf den linken Button wird "left" ausgegeben. Beim Klicken auf den anderen Button "right".

Das klappt auch wunderbar, solange das Fenster nicht borderless ist. Starte das Skript mal mit "hollywood -borderless script.hws" und achte darauf, was passiert, wenn Du die Buttons oben bzw. unten anklickst.

Ich verstehe es jedenfalls nicht.

Autor:  psd [ 20 Feb 2008, 18:38 ]
Betreff des Beitrags: 

Ach ja, in der prefs müssen Pfade zu den Programmen stehen, das Programm-Verzeichnis reicht nicht.

Autor:  malsehn [ 20 Feb 2008, 20:51 ]
Betreff des Beitrags: 

copy and paste Test liefert nur die button ohne Aktion

Autor:  psd [ 20 Feb 2008, 21:54 ]
Betreff des Beitrags: 

Du siehst die Ausgaben, wenn du das Skript aus einer Shell startest.

Je nachdem, wie man es aufruft, arbeitet es richtig, oder nicht.
So ist alles OK:
hollywood script.hws
Und so eben nicht:
hollywood -borderless script.hws

Autor:  Clyde [ 20 Feb 2008, 21:58 ]
Betreff des Beitrags: 

Ok, danke für das neue Beispielprog. Bei mir tritt das selbe Problem auf.

@malsehen: Wenn Du auf einen Button klickst, sollte in der shell, in der Du das Skript gestartet hast, entweder "left" oder "right" erscheinen!

@psd: Ich denke, ich weiß, was passiert: Wenn Du in den oberen Bereich die rechte Maustaste gedrückt hältst, kannst Du das Fenster verschieben! In den anderen Bereichen (in denen die Buttons richtig reagieren), passiert das nicht. D.h. in meinen Augen, die titlebar, die durch borderless verschwindet, wird quasi transparent und nach unten, in das Hollywood-Programm-Fenster reingeschoben und legt sich über alles, was darunter ist. Deswegen kann man das Fenster verschieben, aber direkt darunter nichts anklicken.
Ich habe mal die Buttons in der Höhe halbiert und nach unten geschoben, da klappt das wunderbar. Also:
NPrint("Hier ist oben")

Box( 0, 50, 100, 50, #RED )
Box( 100, 50, 100, 50, #BLUE )

MakeButton( 1, #SIMPLEBUTTON, 0, 50, 100, 50, evtmatch )
MakeButton( 2, #SIMPLEBUTTON, 100, 50, 100, 50, evtmatch )

Ich denke schon, dass das eine Art Bug ist. Bist Du in der Mailingliste angemeldet, um das den Bug zu melden? Sonst mache ich es gern.

MdG

Autor:  psd [ 20 Feb 2008, 22:10 ]
Betreff des Beitrags: 

Ja, das könnte ein Erklärung sein.
Auf der Mailingliste bin ich seit heute, gute Gelegenheit für eine Testmail. ;)
Schreibt man da deutsch oder englisch?

Autor:  Tipsi [ 20 Feb 2008, 22:22 ]
Betreff des Beitrags: 

Clyde hat geschrieben:

... folgende Fehlermeldung:
Zitat:
Zahlen können nicht mit Strings verglichen werden!
... Aktuelle Zeile: 28 - In Funktion: p_readprefs

Wenn Du beim Strichpunkt (;) anstelle
von Hochkommas Anführungs- und
Schlusszeichen nimmst, klappts.

Statt:
If LeftStr( line$, 1 ) <> ';' And StrLen( line$ ) > 1

Das hier:
If LeftStr( line$, 1 ) <> ";" And StrLen( line$ ) > 1

Griessli
Tipsi

Autor:  Clyde [ 20 Feb 2008, 22:36 ]
Betreff des Beitrags: 

@psd: Man schreibt da auf Englisch.
Ich weiß nicht, ob es auch ohne geht (glaube nicht), aber wenn Du eine Yahoo-ID hast bzw. Dir kostenlos erstellst, dann hast Du umfangreiche Möglichkeiten wie z.B. das Durchlesen aller bisherigen Mails der Liste, Umfragen, Projektdatenbank uvm. unter http://tech.groups.yahoo.com/group/airsoft_hollywood/
Ich habe mir auch nur deswegen einen Yahoo-Account angelegt. :-)

@Tipsi: Vielen Dank für die Hilfe! Hat funktioniert. Allerdings bekomme ich jetzt eine andere Fehlermeldung:
Zitat:
Kann Datei AmiKit:Programme/Hollywood/GUI.info nicht öffnen!
... (aktuelle Zeile: 44 - In Funktion: LoadBrush)
Habe nur noch diesen eine Pfad in der Prefs stehen. Denn Pfad gibt es wirklich, habe ich 100 Mal überprüft. Und die GUI von Hollywood ist ja ein richtiges Programm ...!?

Autor:  psd [ 20 Feb 2008, 23:02 ]
Betreff des Beitrags: 

OK, die Mail ist raus.

In Zeile 44 wird einfach das Icon des Programms in einen Brush geladen. Es muß daher in einem Hollywood-tauglichen Format vorliegen. Da Du klassisch unterwegs bist, könnte das vielleicht ein Grund sein (ich bin nicht gerade der Amiga-Experte)?

Seite 1 von 2 Alle Zeiten sind UTC

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de