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

amiga-news.de Forum > Programmierung > Workbench-Icons Drag and Drop [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

19.08.2007, 22:39 Uhr

woop
Posts: 67
Nutzer
Hallo,

ich suche gerade Infos darüber, wie man ein Fenster auf der Workbench öffnet, in welches man Workbench-Icons ziehen und fallenlassen kann, werde allerdings nicht fündig.

Wie ist die Vorgehensweise für sowas? Optimal wäre für mich, wenn mein Programm sobald der User das tut eine Message bekommt, inklusive einer Liste mit Locks und Namen der fallengelassenen Icons.

Ich nehme an, ich muss bein Fenster dazu erstmal bei der Workbench als "Iconempfänger" anmelden.

Achja, unter Kick 1.2 soll das ganze auch funktionieren :)

Gruß

[ - Antworten - Zitieren - Direktlink - ]

19.08.2007, 23:21 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Welche Sprache ?

Ab Amiblitz3_beta4 sind Templates dabei, da gibt es WB_App2, das macht genau das, was du oben schreibst.
Wie es funktioniert, kannst du da sehen. Es nutzt allerdings eine inlcude (app.inlcude), die müsstest du dir auch anschauen, dort passiert eigentlich die dreckige Arbeit.

Ob das allerdings unter 1.2 geht, wage ich zu bezweifeln.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

19.08.2007, 23:29 Uhr

woop
Posts: 67
Nutzer
Zitat:
Original von Der_Wanderer:
Welche Sprache ?


Das gute alte C.

Zitat:
Ab Amiblitz3_beta4 sind Templates dabei, da gibt es WB_App2, das macht genau das, was du oben schreibst.
Wie es funktioniert, kannst du da sehen. Es nutzt allerdings eine inlcude (app.inlcude), die müsstest du dir auch anschauen, dort passiert eigentlich die dreckige Arbeit.


Ist das lesbarer Code, der da in den Amiblitz Templates und Includes steht, sprich, sehe ich welche Betriebssystemfunktionen benutzt und welche Strukturen verändert werden?

Wenn ja, wo kriege ich die am besten her?

Gruß

[ - Antworten - Zitieren - Direktlink - ]

19.08.2007, 23:37 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Der Code ist änhlich wie C, und man sieht wie die OS funktionen benutzt werden.
Das ganze is abgekapselt in die "app.inlcude", die dann high-level funktionalität für AB3 zur verfügung stellt, die dann von dem Template Code benutzt wird.
Wenn du willst kann ich dir dir app.inlcude als ASCII zuschicken, ansonsten benötigtst du AB3 beta4, das gibts hier:

http://www.david-mcminn.co.uk/bernd/ab3/AmiBlitz3full_beta4.lha

ACHTUNG: Jetzt bitte keine News draus machen, das ist eine Developer Version. Das Final 3.0 release kommt schon noch, keine Angst.

Kannst ja, wenn du AB3 hast, einfach mal auf Source->New->WB_App2 gehen und compile&run machen, dann siehst du was es macht.

Ist ein wenig mehr als du brauchst, also auch App Menu und App Icon, aber das kann man einfach weglassen.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 19.08.2007 um 23:39 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 17:03 Uhr

Holger
Posts: 8116
Nutzer
@woop:
Hier das Standard-Beispiel:
C code:
;/* AppWindow.c - Execute me to compile me with SAS/C 6.56
sc NMINC STRMERGE NOSTKCHK NODEBUG DATA=NEAR IGNORE=73 AppWindow.c
slink FROM LIB:c.o,AppWindow.o TO AppWindow LIBRARY LIB:sc.lib,LIB:amiga.lib
quit
*/
/*
Copyright (c) 1991-1999 Amiga, Inc.

This example is provided in electronic form by Amiga, Inc.
for use with the Amiga Mail Volume II technical publication.
Amiga Mail Volume II contains additional information on the correct
usage of the techniques and operating system functions presented in
these examples.  The source and executable code of these examples may
only be distributed in free electronic form, via bulletin board or
as part of a fully non-commercial and freely redistributable
diskette.  Both the source and executable code (including comments)
must be included, without modification, in any copy.  This example
may not be published in printed form or distributed with any
commercial product. However, the programming techniques and support
routines set forth in these examples may be used in the development
of original executable software products for Amiga
computers.

All other rights reserved.

This example is provided "as-is" and is subject to change; no
warranties are made.  All use is at your own risk. No liability or
responsibility is assumed.
*/

#include <exec/memory.h>
#include <intuition/intuition.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>

#ifdef LATTICE
#include <stdio.h>

/* disable SAS/C CTRL-C handing */
int
CXBRK(void)
{
    return (0);
}
int
chkabort(void)
{
    return (0);
}

#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/icon_protos.h>
#include <clib/wb_protos.h>
#endif

struct IntuitionBase *IntuitionBase;
struct WorkbenchBase *WorkbenchBase;

void            main(void);

void
main(void)
{
    struct MsgPort *msgport;
    struct Window  *window;
    struct AppWindow *appwindow;
    struct IntuiMessage *imsg;
    struct AppMessage *appmsg;
    struct WBArg   *argptr;

    ULONG           id = 1, userdata = 0;
    BOOL            ABORT = FALSE;
    UCOUNT          i;

    /* Open Intuition.library & Workbench.library. Fail silently if < 36 */
    if (IntuitionBase = OpenLibrary("intuition.library", 36))
    {
        if (WorkbenchBase = OpenLibrary("workbench.library", 36))
        {
            /* Create the message port to which Workbench can send messages */
            if (msgport = CreateMsgPort())
            {
                if (window =
                    OpenWindowTags(NULL, WA_Left, 0, WA_Top, 1, WA_Width, 160,
                                   WA_Height, 50, WA_IDCMP, CLOSEWINDOW,
                                   WA_Flags, WINDOWCLOSE | WINDOWDRAG,
                                   WA_Title, "AppWindow", TAG_END))
                {

                    /*
                     * Turn the window we opened into an AppWindow. Provide an
                     * ID so you can tell possible more AppWindows apart.
                     */
                    if (appwindow = AddAppWindow(id, userdata, window, msgport, NULL))
                    {
                        do
                        {
                            /* Wait for either a CLOSEWINDOW or an AppMessage */
                            Wait(1 << window->UserPort->mp_SigBit |
                                1 << msgport->mp_SigBit);
                            while (imsg = (struct IntuiMessage *)
                                GetMsg(window->UserPort))
                            {
                                if (imsg->Class = CLOSEWINDOW)
                                    ABORT = TRUE;
                                ReplyMsg((struct Message *) imsg);
                            }
                            while (appmsg = (struct AppMessage *) GetMsg(msgport))
                            {

                                /*
                                 * The AppMessage type will be MTYPE_APPWINDOW,
                                 * the ID & userdata are what we supplied when
                                 * the window was designed as an AppWindow.
                                 * NumArgs allows us to process the Workbench
                                 * arguments properly.
                                 */
                                printf(
                       "aw: appmsg=%lx, Type=%ld, ID=%ld, UserData=%ld, NumArgs=%ldn",
                                       appmsg, appmsg->am_Type, appmsg->am_ID,
                                       appmsg->am_UserData, appmsg->am_NumArgs);

                                /*
                                 * Get a pointer to the start of the Workbench
                                 * argument list.
                                 */
                                argptr = appmsg->am_ArgList;
                                for (i = 0; i < appmsg->am_NumArgs; i++)
                                {

                                    /*
                                     * The lock will be on the directory in
                                     * which the file resides. If there is no
                                     * filename, either a volume or window was
                                     * dropped on us.
                                     */
                                    printf("targ(%ld): Name='%s', Lock=%lxn",
                                           i, argptr->wa_Name, argptr->wa_Lock);
                                    /* Point to next argument */
                                    argptr++;
                                }
                                ReplyMsg((struct Message *) appmsg);
                            }
                        } while (ABORT == FALSE);
                        /* remove the appwindow status and close down */
                        RemoveAppWindow(appwindow);
                    }
                    else
                        printf("Couldn't AddAppWindown");
                    CloseWindow(window);
                }
                else
                    printf("Couldn't open windown");
                DeleteMsgPort(msgport);
            }
            else
                printf("Coulnd't create messageportn");
            CloseLibrary(WorkbenchBase);
        }
        else
            printf("Couldn't open workbench.libraryn");
        CloseLibrary(IntuitionBase);
    }
    else
        printf("Couldn't open intuition.libraryn");
}

Zitat:
Achja, unter Kick 1.2 soll das ganze auch funktionieren :)
Das kannst Du allerdings vergessen.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 21:13 Uhr

woop
Posts: 67
Nutzer
Zitat:
Original von Holger:
@woop:
Hier das Standard-Beispiel:
C code:
/* AppWindow.c - Execute me to compile me with SAS/C 6.56
[...]



Prima, genau das habe ich gesucht!

Zitat:
Zitat:
Achja, unter Kick 1.2 soll das ganze auch funktionieren :)
Das kannst Du allerdings vergessen.

Hmja, das hatte ich befürchtet. Die benötigte workbench.library gibts erst ab 2.0.

Vielen Dank euch beiden für die Hilfe und das Codebeispiel!

Gruß,
woop


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Workbench-Icons Drag and Drop [ - Suche - Neue Beiträge - Registrieren - Login - ]


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