amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > HintInfo wie anwenden [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

19.02.2005, 00:03 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Hi,
ich bin gerade dabei mich wieder ein bisschen mit Reaction zu beschäftigen und bin in den AutoDocs auf das hier gestossen:

WINDOW_HintInfo (struct HintInfo *)
Pointer to a gadget HintInfo array. This is similar in concept
to Apple's bubble help or Microsoft's help tips. By providing
this array of helpinfo, and setting WINDOW_GadgetHelp, TRUE,
window class will transparently manage the help hints.
Important: Even though this feature was already implemented
since release v43 of window.class it should NOT be used with
any window.class older than 45.11!

struct HintInfo
{
WORD hi_GadgetID; /* Gadget ID this hint belongs
* to, -1 indicates end. */
WORD hi_Code; /* Code required for this gadget, or -1
* if it doesn't matter. */
STRPTR hi_Text; /* The text of the hint. */
ULONG hi_Flags; /* Flags, currently unsupported and
* must be set to 0L. */
};

Applicability is (OM_NEW, OM_SET)

Dummerweise meckert mein Compiler (gcc 3.3) immer wenn ich versuch einem HintInfo Element einen Text zuzuweisen. Der sagt dann:
error: invalid use of 'STRPTR'

Hier mal ein Codeausschnitt:

HintInfo hint1; //Ein HintInfo Struct erzeugen

hint1.hi_GadgetID = -1;
hint1.hi_Code = -1;
hint1.STRPTR = (STRPTR)"TestText"; //wie kriege ich hier meinen Text rein ?
hint1.hi_Flags = 0L;


Ich bastel da jetzt schon eine ganze weile dran rum und habe schon die wildesten (zeiger-)konstruktionen ausprobiert aber ich komme irgendwie auf keinen grünen zweig.....

[ - Antworten - Zitieren - Direktlink - ]

19.02.2005, 09:36 Uhr

Mazze
Posts: 263
Nutzer
Zitat:
Original von Kaesebroetchen:
Hi,
ich bin gerade dabei mich wieder ein bisschen mit Reaction zu beschäftigen und bin in den AutoDocs auf das hier gestossen:

STRPTR hi_Text; /* The text of the hint. */
hint1.STRPTR = (STRPTR)"TestText"; //wie kriege ich hier meinen Text rein ?


STRPTR ist der Datentyp:

hint1.hi_Text = "TestText"

Du brauchst aber gleich ein Array; beim letzten Element muss für hi_GadgetID -1 eingetragen werden.
HintInfo hint1[ANZAHL +1];

MFG Mazze

--
Amiga Bedroom Programmer :smokin:

[ - Antworten - Zitieren - Direktlink - ]

19.02.2005, 16:02 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Danke !!
Da habe ich mal wieder ein Brett vorm Kopf gehabt !

Ich habe den Code jetzt auch überarbeitet und eigentlich sollte das Programm mir jetzt den HintText anzeigen wenn ich mit der Maus über den Button gehe. Tut es aber nicht !

Hier mal ein paar Codeausschnitte:

#define IDB1 1001
#define IDB2 1002
#define IDE1 2001

HintInfo hint1[2]; //Ein HintInfo Struct erzeugen

hint1[0].hi_GadgetID = IDB1;
hint1[0].hi_Code = -1;
hint1[0].hi_Text = "TestText"; //wie kriege ich hier meinen Text rein ?
hint1[0].hi_Flags = 0L;

hint1[1].hi_GadgetID = -1;
hint1[1].hi_Code = -1;
hint1[1].hi_Text = "TestText"; //wie kriege ich hier meinen Text rein ?
hint1[1].hi_Flags = 0L;

button = (Object*)NewObject( BUTTON_GetClass(),NULL,GA_ID,IDB1,

GA_Text,"Mein erster Reaction-Button ...",
TAG_END );
window = (Object*)NewObject( WINDOW_GetClass(),NULL,
WINDOW_Layout,layout,
WINDOW_Position,WPOS_CENTERMOUSE,
WA_Activate,TRUE,
WA_Title,"Ein Fenster !!",
WA_DragBar,TRUE,
WA_SizeGadget,TRUE,
WA_CloseGadget,TRUE,
WA_DepthGadget,TRUE,
WINDOW_IconifyGadget,TRUE,
WINDOW_GadgetHelp, TRUE,
WINDOW_HintInfo, hint1,
TAG_END );

Fehlt da noch irgenwo ein Tag ?
Gibt es vielleicht irgendwo ein paar gute Codebeispiele zu Reaction ?

[ - Antworten - Zitieren - Direktlink - ]

19.02.2005, 17:18 Uhr

Mazze
Posts: 263
Nutzer
Bei dem Code, den du gepostet hast, war alles in Ordnung. Hattest du eventuell noch keinen Message-Loop?

code:
#include <stdio.h>
#include <stdlib.h>

#define  NO_INLINE_STDARG
#define  ALL_REACTION_MACROS

#include <reaction/reaction_macros.h>

#include <proto/layout.h>
#include <gadgets/layout.h>

#include <proto/button.h>
#include <gadgets/button.h>

#include <proto/window.h>
#include <classes/window.h>

#include <intuition/classusr.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <clib/alib_protos.h>

#define IDB1 1001
#define IDB2 1002
#define IDE1 2001

struct IntuitionBase *IntuitionBase;
struct Library *WindowBase;
struct Library *LayoutBase;
struct Library *ButtonBase;

HintInfo hint1[2]; //Ein HintInfo Struct erzeugen
Object *window, *layout, *button;
BOOL alllibrariesopen = FALSE;

void cleanexit(char *str);

int main(void)
{
    ULONG windowsignal,receivedsignal,result,code;
    BOOL end;

    if ( ! (IntuitionBase= (struct IntuitionBase*)OpenLibrary("intuition.library",39)))
        cleanexit("Can't open intuition.library");

    if ( ! (WindowBase= OpenLibrary("window.class",44)))
        cleanexit("Can't open window.class");

    if ( ! (LayoutBase= OpenLibrary("gadgets/layout.gadget",44)))
        cleanexit("Can't open layout.gadget");

    if ( ! (ButtonBase= OpenLibrary("gadgets/button.gadget",44)))
        cleanexit("Can't open button.gadget");

    alllibrariesopen = TRUE;
    hint1[0].hi_GadgetID = IDB1;
    hint1[0].hi_Code = -1;
    hint1[0].hi_Text = "TestText";
    hint1[0].hi_Flags = 0L;

    hint1[1].hi_GadgetID = -1;
    hint1[1].hi_Code = -1;
    hint1[1].hi_Text = NULL;
    hint1[1].hi_Flags = 0L;

    button = (Object*)NewObject( BUTTON_GetClass(),NULL,GA_ID,IDB1,
        GA_Text,"Mein erster Reaction-Button ...", TAG_END );
    layout = (Object*)NewObject( LAYOUT_GetClass(),NULL, LAYOUT_AddChild, button, TAG_DONE);

    window = (Object*)NewObject( WINDOW_GetClass(),NULL,
        WINDOW_Layout,layout,
        WINDOW_Position,WPOS_CENTERMOUSE,
        WA_Activate,TRUE,
        WA_Title,"Ein Fenster !!",
        WA_DragBar,TRUE,
        WA_SizeGadget,TRUE,
        WA_CloseGadget,TRUE,
        WA_DepthGadget,TRUE,
        WINDOW_IconifyGadget,TRUE,
        WINDOW_GadgetHelp, TRUE,
        WINDOW_HintInfo, hint1,
    TAG_END );

    if ( ! (window))
        cleanexit("Can't create window");

    if ( ! ((struct Window *) DoMethod(window,WM_OPEN)))
        cleanexit("Can't open window");

    GetAttr(WINDOW_SigMask,window,&windowsignal);

    end = FALSE;
    while (!end)
    {
        receivedsignal = Wait(windowsignal);
        while ((result = DoMethod(window,WM_HANDLEINPUT,&code)) != WMHI_LASTMSG)
        {
            switch (result & WMHI_CLASSMASK)
            {
                case WMHI_CLOSEWINDOW:
                    end=TRUE;
                    break;
            }
        }
    }
    DoMethod(window,WM_CLOSE);
    cleanexit(NULL);
}

void cleanexit(char *str)
{
    if (str) printf("Error: %sn",str);

    if (alllibrariesopen)
    {
        DisposeObject(window);
    }

    CloseLibrary((struct Library*)IntuitionBase);
    CloseLibrary(WindowBase);
    CloseLibrary(LayoutBase);
    CloseLibrary(ButtonBase);
    exit(0);
}



--
Amiga Bedroom Programmer :smokin:

[ - Antworten - Zitieren - Direktlink - ]

19.02.2005, 19:19 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@Mazze
Danke für die Hilfe ! (vor allem für den Beispielcode)

Das Programm öffnet jetzt ein Hint-Fenster, aber es ist winzig und es steht auch nichts drin ?!

Ich wage es kaum zu fragen...
aber gibt es vielleicht irgendwo eine Dokumentation zu Reaction, die über die Autodocs hinausgeht ?
So mit Codebeispielen, die auch zu aktuellen Compilern passen und so. ?

[ - Antworten - Zitieren - Direktlink - ]

20.02.2005, 10:54 Uhr

Mazze
Posts: 263
Nutzer
Zitat:
Original von Kaesebroetchen:
@Mazze
Danke für die Hilfe ! (vor allem für den Beispielcode)

Das Programm öffnet jetzt ein Hint-Fenster, aber es ist winzig und es steht auch nichts drin ?!


Vielleicht liegt das Problem hier:

Important: Even though this feature was already implemented since release v43 of window.class it should NOT be used with any window.class older than 45.11!

Unter OS3.9BB2 funktioniert das obige Beispielprogramm.

Zitat:
Ich wage es kaum zu fragen...
aber gibt es vielleicht irgendwo eine Dokumentation zu Reaction, die über die Autodocs hinausgeht ?
So mit Codebeispielen, die auch zu aktuellen Compilern passen und so. ?


Die vorhandenen Beispiele sind i.d.R. in C geschrieben, für C++ sind häufig zusätzliche Typkonvertierungen nötig.

--
Amiga Bedroom Programmer :smokin:

[ - Antworten - Zitieren - Direktlink - ]

20.02.2005, 13:39 Uhr

Kaesebroetchen
Posts: 643
Nutzer
[quote]
Original von Mazze:
Zitat:
Vielleicht liegt das Problem hier:

Important: Even though this feature was already implemented since release v43 of window.class it should NOT be used with any window.class older than 45.11!

Unter OS3.9BB2 funktioniert das obige Beispielprogramm.



Genau daran hat es gelegen.
Nochmals Danke !

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > HintInfo wie anwenden [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.