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

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

-1- 2 [ - Beitrag schreiben - ]

28.12.2006, 21:26 Uhr

Ralf27
Posts: 2779
Nutzer
Ich will Euch nicht auf den Keks gehn, aber bis jetzt hab ich dieses Thema immer geschickt umgangen, bzw. hab ich kaum einen Schimmer wie ich es am besten machen könnte.

Hab hier noch OS1.2-Doku, nach der ich mit Intui-Mitteln auch Gadgets machen könnte. Allerdings sieht dies da nicht gerade "schick" aus. Da ich aber auch die Gadtools benutze, könnte ich auch diese dazu benutzen. Allerdings habe ich mir dazu mal das Demo in MaxonBasic angesehn und quasi Kopfschmerzen bekommen.

Die Frage ist jetzt viel mehr wo ich einfache, verständliche und am besten deutsche Doku dazu finden könnte. Wie schon geschrieben könnte ich das ganze auch AmigaBasic OS1.2-Like machen, allerdings möchte ich mir das auch nicht mehr antun und wenn ich schon was größeres aufbaue, dann auch richtig machen, auch wenn ich dazu vermutlich auch ca. 10 Jahre zu spät komme... :glow: 8o

Dank Eurer Hilfe hab ich ja auch schon einiges in Sachen Amigaprogrammierung gelernt und ich kann mir auch gut vorstellen das mir ein paar einfache C-Beispiele mehr helfen als ein (meiner Meinung nach)vermurkstes MaxonBasic-Demo, das ich überhaupt nicht lesen kann, bzw. nicht versteh.

Vielen Dank schonmal im vorraus. :D

Achja, es werden eigentlich nur folgende Gadgets benötigt:
Stringgadgets und ein einfaches Auswahlgadget zum starten.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 10:24 Uhr

MaikG
Posts: 5172
Nutzer
Mh, gadtools ist dir also zu kompliziert. Ich denke da gibt es
dann besonders unter OS1.2 nur die Möglichkeit, die Gadgets selbst
zu proggen.

Ist ziemlich einfach, oben und links eine weisse Line, rechts und
unten eine Schwarze in der Mitte der Text - für ein Button Gadget.

Klicks fragst du selbst ab, wenn die Mauskoordinaten dem Gadget
entsprechen und einer Klickt, machst du die weissen Linen zu schwarzen
und umgekehrt. Dann beim Loslassen wieder herstellen und die gewünschte
Funktion ausführen.

Das String Gadget kannst du die mit einem Malprogramm von der WB
holen und ebenso erstellen, für den Text nimmst du das Get.String
beispiel(hast du?) und setzt das an die entsprechende Position.
Ist natürlich ohne Clipboard Funktion aber hat 1.2 das überhaupt?

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 10:34 Uhr

thomas
Posts: 7716
Nutzer
@Ralf27:

Hier ist ein kommentiertes Gadtools-Beispiel in C: http://thomas-rapp.homepage.t-online.de/examples/gadtools.c

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 12:59 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von MaikG:
Ist ziemlich einfach, oben und links eine weisse Line, rechts und
unten eine Schwarze in der Mitte der Text - für ein Button Gadget.

Klicks fragst du selbst ab, wenn die Mauskoordinaten dem Gadget
entsprechen und einer Klickt, machst du die weissen Linen zu schwarzen
und umgekehrt. Dann beim Loslassen wieder herstellen und die gewünschte
Funktion ausführen.

So etwas hat man auch unter AOS1.x nicht selber gemacht. Dafür gibt es eine Border-Struktur, mit der man mehrere Linien zeichnen kann. Da legt man eine mit dem weiß oben & links und schwarz unter & rechts an und eine zweite mit umgekehrten Farben und verwendet die als GadgetRender und SelectRender.

Den Rest macht das System.

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

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 13:04 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von thomas:
Hier ist ein kommentiertes Gadtools-Beispiel in C: http://thomas-rapp.homepage.t-online.de/examples/gadtools.c

Der public screen sollte aber nicht die gesamte Programmlaufzeit gelockt bleiben. Nach dem Öffnen des Fensters gibt es keinen Grund mehr, den Lock aufrecht zu erhalten.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 15:26 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von Holger:
Der public screen sollte aber nicht die gesamte Programmlaufzeit gelockt bleiben. Nach dem Öffnen des Fensters gibt es keinen Grund mehr, den Lock aufrecht zu erhalten.


Es gibt aber auch keinen Grund, ihn freizugeben. Das Fenster blockt den Screen ohnehin.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 16:18 Uhr

Ralf27
Posts: 2779
Nutzer
Danke, das muß ich mir gleich mal ansehn.

Wegen verstehn und so:
Ich programmiere in MaxonBasic und eigentlich sollte ich diese Sprache ja auch lesen können, aber was da als Beispiele mitgeliefert wird ist wirklich der Hammer. Da kann ich ja besser C lesen als diese Beispiele. Ich will hier aber nicht denn Eindruck hinterlassen das ich undankbar über die Hilfe von Maxon bin, aber nunja...

Bis jetzt hab ich über die C-Beispiele mehr gelernt als mit den Beispielen in MBasic. 8o :D
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 17:40 Uhr

MaikG
Posts: 5172
Nutzer
>So etwas hat man auch unter AOS1.x nicht selber gemacht. Dafür gibt
>es eine Border-Struktur, mit der man mehrere Linien zeichnen kann.

Mag ja sein aber wenn man diverse nicht Standard Farben nehmen
will und ggf. Bilder wird das wohl schwieriger...

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 17:49 Uhr

Ralf27
Posts: 2779
Nutzer
MaikG:

Es kommt darauf an wie es erklärt wird. Die Beispiele von Maxon sind ja wohl wirklich recht kompliziert und seltsam gemacht. Das Beispiel vom Thomas ist ja wohl wirklich selbsterklärend und einfach einfach. :)

Damit kann man Gadtools verstehn. :P :D

Achja, vorher hab ich die Gadgets von Intuition benutzt, was ja auch möglich ist. Aber auch das fast nie oder zu Testzwecken. Wie oben schon geschrieben hab ich dieses Thema immer geschickt umfahren. :glow: :D
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 18:29 Uhr

bruZard
Posts: 307
Nutzer
Finde ich alles wahnsinnig kompliziert ... ich muss nur schreiben "myButton:TGadget = CreateButton("Mein schöner Button", 2,2,100,20,win)" und kann diesen Source für Linux, Windows und MacOS kompilieren, sieht überall gleich aus ...... aber gut, ich schweife ab. :)

--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 19:29 Uhr

Mad_Dog
Posts: 1944
Nutzer
Schau mal hier:

http://w3.norman-interactive.com/C-Kurs_10_1.html

Ich hoffe, das hilft Dir ein wenig weiter...
--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 19:55 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von thomas:
Es gibt aber auch keinen Grund, ihn freizugeben. Das Fenster blockt den Screen ohnehin.


Das ist trotzdem etwas anderes. Das erste Beispiel, das mir spontan dazu einfällt, ist, dass ein Programm den public screen in private ändern kann, damit keine neuen Fenster mehr geöffnet werden können. Wenn man eigentlich darauf wartet, dass die alten geschlossen werden, ist das ziemlich sinnvoll. Wenn ein Programm den screen die ganze Zeit per LockPubScreen blockiert, geht das natürlich nicht.

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

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 19:58 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von bruZard:
Finde ich alles wahnsinnig kompliziert ... ich muss nur schreiben "myButton:TGadget = CreateButton("Mein schöner Button", 2,2,100,20,win)" und kann diesen Source für Linux, Windows und MacOS kompilieren, sieht überall gleich aus ...... aber gut, ich schweife ab. :)


Mmh, zum einen vermisse ich AmigaOS in Deiner Liste (wegen der Relevanz), zum anderen sehe ich da absolute Koordinaten und Größen in Deinem Beispiel, was also, wenn Du so wie im Beispielprogramm ein font-sensitives Layout erzeugen willst, keinen Deut einfacher zu programmieren ist.

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

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 20:04 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von MaikG:
>So etwas hat man auch unter AOS1.x nicht selber gemacht. Dafür gibt
>es eine Border-Struktur, mit der man mehrere Linien zeichnen kann.

Mag ja sein aber wenn man diverse nicht Standard Farben nehmen
will und ggf. Bilder wird das wohl schwieriger...

Hab auch nicht behauptet, dass AOS1.x GUI-Programmierung einfach gewesen wäre. Ging nur darum, dass die 3D-Look Programmierung nicht von Hand programmiert werden musste, insb. das reagieren auf Selektion oder (Gott bewahre) der Test, ob ein Maus-Ereignis innerhalb der Gadget-Grenzen stattfand.

Ich hatte damals, weiß selber nicht mehr woher, einen ziemlich komfortablen GUI-Editor, mit dem man das alles zusammenklicken und dann source-code generieren konnte. Den code hat man dann hinterher noch ein bisschen optimiert, so dass z.B. gleich große Gadgets auch das gleiche Border-Objekt benutzt haben, so dass es nicht nur weniger Speicher brauchte, sondern auch konsistentes Aussehen sichergestellt war, selbst dann, wenn man die Farben dynamisch angepasst hat.

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

[ - Antworten - Zitieren - Direktlink - ]

29.12.2006, 21:06 Uhr

bruZard
Posts: 307
Nutzer
Zitat:
Mmh, zum einen vermisse ich AmigaOS in Deiner Liste (wegen der Relevanz), zum anderen sehe ich da absolute Koordinaten und Größen in Deinem Beispiel, was also, wenn Du so wie im Beispielprogramm ein font-sensitives Layout erzeugen willst, keinen Deut einfacher zu programmieren ist.

Yop. absolute Koordinaten. Spielt aber keine Rolle. Diese Daten werden ausschliesslich für die Initialisierung verwendet und richten sich danach nach den globalen Eigenschaften des Windows ... aber wie Du schon sagtest, so eine einfache Programmierung hat keinerlei Relevanz für ein Monster wie GTTools, Intuition oder MUI.

--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 00:12 Uhr

Ralf27
Posts: 2779
Nutzer
Ich hab das Beispiel mal übersetzt, aber leider stürzt es immer nach dem öffnen des Fensters ab. Ich hab es immer weiter vereinfacht, aber dennoch, irgendwo hab ich wohl einen Fehler drin.

Ich dachte wirklich ich hätte es verstanden, aber leider...

Kurz noch ein Hinweis: Ich hab es mal stark vereinfacht um den Fehler etwas einzugrenzen, aber leider dennoch nicht gefunden.

Kurz mal das Programm:

code:
REM $INCLUDE Exec.bh
REM $INCLUDE DOS.bh
REM $INCLUDE Intuition.bh
REM $INCLUDE gadtools.bh
LIBRARY OPEN "exec.library", LIBRARY_MINIMUM&
LIBRARY OPEN "intuition.library", LIBRARY_MINIMUM&
LIBRARY OPEN "dos.library", LIBRARY_MINIMUM&
LIBRARY OPEN "gadtools.library", LIBRARY_MINIMUM&

REM $window
REM $errors
REM $lines
REM $nolibrary
REM $nodebug
REM $nobreak
REM $noevent
REM $nooverflow
REM $novarchecks
REM $noautodim
REM $noaddicon
REM $noarray
REM $nostack

DEFINT a-z

CONST tagsl&=100
tags&=AllocMem&(tagsl&,MEMF_PUBLIC&)
IF tags&=0 THEN Ende

CONST GID_Auswahl=1
CONST GID_Eingabe=2
CONST GID_Weiter=3
CONST GID_Abbruch=4

scr&=LockPubScreen&(0)
IF scr&=0 THEN Ende

glist&=0

gad&=CreateContext&(VARPTR(glist&))

ng&=AllocMem&(NewGadget_sizeof%,MEMF_PUBLIC&)
IF ng&=0 THEN Ende
VInfo&=GetVisualInfoA&(scr&,0)

POKEL ng&+ng_VisualInfo%,VInfo&
POKEL ng&+ng_TextAttr%,PEEKL(scr&+ScreenFont%)
POKEW ng&+ng_Flags%,0

POKEW ng&+ng_LeftEdge%,10
POKEW ng&+ng_TopEdge%,20
POKEW ng&+ng_Width%,100
POKEW ng&+ng_Height%,20
POKEL ng&+ng_GadgetText%,SADD("Eingabe"+CHR$(0))
POKEW ng&+ng_GadgetID%,GID_Eingabe
gad& = CreateGadgetA&(STRING_KIND&,gad&,ng&,0)

POKEW ng&+ng_LeftEdge%,120
POKEL ng&+ng_GadgetText%,SADD("Abbruch"+CHR$(0))
POKEW ng&+ng_GadgetID%,GID_Abbruch
gad& = CreateGadgetA&(BUTTON_KIND&,gad&,ng&,0)

IF gad&=0 THEN Ende

 TAGLIST tags&, _
 WA_Width&, 250, _
 WA_Height&, 150, _
 WA_Left&, 0, _
 WA_Top&, 0, _
 WA_PubScreen&, scr&, _
 WA_Title&, "Fenster", _
 WA_Flags&,WFLG_CLOSEGADGET& OR WFLG_DRAGBAR& OR WFLG_DEPTHGADGET& OR WFLG_ACTIVATE& OR WFLG_NOCAREREFRESH&, _
 WA_IDCMP&,IDCMP_CLOSEWINDOW& OR IDCMP_VANILLAKEY& OR BUTTONIDCMP& OR CYCLEIDCMP&, _
 WA_Gadgets&,glist&, _
 TAG_END&
 win&=OpenWindowTagList&(0,tags&)
 IF win&=0 THEN Ende
 
 UserPort&=PEEKL(win&+UserPort%)
 GT_RefreshWindow win&,0
 
 go=1
 WHILE go
  junk=WaitPort&(UserPort&)
  msg&=GT_GetIMsg&(UserPort&)
  IF msg& THEN
   Class&=PEEKL(msg&+Class%)
   SELECT CASE Class&
   CASE IDCMP_GADGETUP&
    gad&=PEEKL(msg&+IAddress%)
    ID&=PEEKW(gad&+ng_GadGetID%)
    SELECT CASE ID&
    CASE GID_Eingabe
     text&=0
     TAGLIST tags&, _
     GTST_String&,VARPTR(text&), _
     TAG_END&
     junk=GT_GetGadgetAttrsA(gad&,win&,0,tags&)
     PRINT PEEK$(text&)
    CASE GID_Abbruch
     go=0
    END SELECT
   CASE IDCMP_VANILLAKEY&
    go=0
   CASE IDCMP_CLOSEWINDOW&
    go=0
   END SELECT
   GT_ReplyIMsg msg&
  END IF
 WEND
Ende:
 IF win& THEN CloseWindow win&
 IF glist& THEN FreeGadgets glist&
 IF VInfo& THEN FreeVisualInfo VInfo&
 IF ng& THEN FreeMem ng&,NewGadget_sizeof%
 IF scr& THEN UnLockPubScreen 0,scr&
 IF tags& THEN FreeMem tags&,tagsl&


Wenn ich die Doku richtig verstanden habe, dann muß ich kein Speicher für glist reservieren, bzw. wird dies wohl dann auch wieder mit FreeGadgets freigegeben.

Ich hab wirklich mal vor irgendwann mal bei GadTools auch die Gadgets zu verstehn. Bei den Menus mit GadTools bin ich ja auch schon dank Euch durchgestiegen. :)

--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 03:43 Uhr

Holger
Posts: 8116
Nutzer
@Ralf27:
Das ist jetzt zwar bestimmt nicht die Ursache des Absturzes, sollte aber schon mal erwähnt werden: WFLG_NOCAREREFRESH& solltest Du streichen. NoCareRefresh und Gadtools gehören definitiv nicht zusammen.

Für genauere Blicke ist es jetzt leider etwas zu spät :sleep:

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

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 08:33 Uhr

Cj-Stroker
Posts: 1343
Nutzer
Hi Ralf27

Auch auf die Gefahr hin, daß ich mir den Mund fusselig labere.

Du hättest es auch in diesem Fall um Welten einfacher haben können.
In Blitz geht das weitaus einfacher und man versteht es sogar.

Zudem enthält die letzte von mir releaste Distri auch noch eine Menge Examples zu den Gadtools. Da ist alles dabei, was man braucht.

In Sachen WYSIWYG Editoren mußt du im Aminet mal nachgucken: http://aminet.net/search.php?query=gadtools

Die Gadtoolsbox ist zum Beispiel sowas.

Ruten Rutsch ins neue Jahr !

MFG

Cj-Stroker



--
Webmaster of Amiforce and Abakus-Design
http://www.Amiforce.de
(Fight For Amiga)

http://www.cj-stroker.de/Abakus/
(World of AMHuhn and more)

Forum:
http://amiforce-forum.cj-stroker.de

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 09:18 Uhr

thomas
Posts: 7716
Nutzer
@Ralf27:

Wenn du schreibst
code:
POKEL ng&+ng_GadgetText%,SADD("Abbruch"+CHR$(0))

bist du dann sicher, daß der Speicher mit dem Text bis zum Programmende unverändert bleibt ? Der Text wird nämlich nicht kopiert, sondern der Pointer, den du übergibst wird so übernommen. Wenn du den Speicher dann für etwas anderes benutzt, ist es klar, daß das Programm abstürzt.

Ich würde es vielleicht so schreiben (vorausgesetzt, daß das basicmäßig richtig ist):
code:
CONST Abbruch_text$ = "Abbruch"+CHR$(0)
POKEL ng&+ng_GadgetText%,SADD(Abbruch_text$)


Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 09:27 Uhr

Ralf27
Posts: 2779
Nutzer
@Cj-Stroker:

Ich hab mir hier damals mal BlitzBasic gekauft, das hier auch läuft. Allerdings läuft bei mir das AmiBlitz nicht, da es eine Grafikarte vorraussetzt. Oder eben eine CybergraphX-Installation für AGA(<- ?!?). Außerdem war damals auch der Hinweis auf "am besten unter WinUAE programmieren" schon merkwürdig.

Mag ja sein das AmiBlitz wesentlich besser und einfacher ist. Es mag auch sein das MaxonBasic total veraltet und langsam ist. Aber auf eins kommt es mir an, das es Spaß macht.

Ok, an gewissen Punkten hätte ich vermutlich lieber eine andere Sprache als MaxonBasic...

Achja, ich hab wirklich keine Grafikkarte hier in meinem kleinen Amiga. Im großen ist eine drin, aber der ist seit fast einem Jahr außer Betrieb (A1200T-Bastelrechner...)
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 09:29 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von thomas:
Wenn du schreibst
code:
POKEL ng&+ng_GadgetText%,SADD("Abbruch"+CHR$(0))

bist du dann sicher, daß der Speicher mit dem Text bis zum Programmende unverändert bleibt?
Da bin ich mir schon recht sicher. Außer, wenn das Programm abstürzt, dann wird auch dieser Speicherbereich vom MBasic-Compiler freigegeben und dann können wilde Sachen drin stehn.

Aber ich kann dies ja auch nochmal umbauen und in einem eigenen Speicherbereich übergeben.

Ich vermute aber das das nicht der Quell des Übels ist. Ich muß da woanderst einen ganz schönen Bockmist gebaut haben.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 09:48 Uhr

MaikG
Posts: 5172
Nutzer
code:
SUB Setng_GadgetText(a$)
SHARED ng(1)
POKEL VARPTR(ng(ng_GadgetText\2)),SADD(a$+CHR$(0))
END SUB



ng(ng_LeftEdge\2)= 20
ng(ng_TopEdge\2)   = 50
ng(ng_Width\2)      = 100
ng(ng_Height\2)     = 12
Setng_GadgetText  "OK"
ng(ng_GadgetID\2)   = 1 
ng(ng_Flags\2)      = 0
  TAGLIST VARPTR(GadgetTags&(0)), GT_Underscore&, "_"%, TAG_END&
 gad& = CreateGadgetA&(BUTTON_KIND&, gad&, VARPTR(ng(0)), VARPTR(gadgetTags&(0)))


Ich kann mich schwach erinnern das ich dieses Sub da oben nicht
grundlos verwende. Lehne dein Style doch mehr an die Maxon Beispiele
an dann könnte ich dir genauer sagen was falsch ist.

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 18:45 Uhr

Holger
Posts: 8116
Nutzer
@Ralf27:
Also, ich habe jetzt Dein Programm getestet und es läuft.
Neben dem schon angesprochenen Fehler, dass Du NoCareRefresh eingeschaltet hat, was allerdings keine Auswirkungen hat, solange Du nur einen Button und ein String-Gadget benutzt, hast Du noch einen Fehler beim Abfragen der angeklickten Gadget ID.

Da wo steht:
code:
gad&=PEEKL(msg&+IAddress%)
ID&=PEEKW(gad&+ng_GadGetID%)
SELECT CASE ID&

muss es heißen:
code:
gad&=PEEKL(msg&+IAddress%)
ID&=PEEKW(gad&+GadgetGadgetID%)
SELECT CASE ID&

Ansonsten läuft alles...

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

[ - Antworten - Zitieren - Direktlink - ]

30.12.2006, 20:40 Uhr

Ralf27
Posts: 2779
Nutzer
Tatsache, das war alles, jetzt läuft es! Danke!

Alledings, irgendwas ist da dennoch faul:
Beim ersten Starten vom Programm sieht das ganze etwas anderst aus als beim zweiten mal. Das versteh ich nun wieder nicht.

Z.b. ist beim zweiten Programmstart der Text verschoben. Wie kann denn das passieren?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

31.12.2006, 12:18 Uhr

Ralf27
Posts: 2779
Nutzer
Genauergetippt ist kein Text zu sehn und wenn ich nichts in die Gadget eingebe, dann wird dann auch beim auslesen der Gadgets nicht angegeben, obwohl ich ein Defaulttext drin stehn habe. Ich vermute mal das ich den Text falsch übergebe. Aber wieso läuft es dann nur bei mir nicht und bei euch richtig?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

31.12.2006, 14:36 Uhr

MaikG
Posts: 5172
Nutzer
>Z.b. ist beim zweiten Programmstart der Text verschoben. Wie kann denn das passieren?

Nach mehrmaligen Starten war kein Standard Text mehr im Text-Gadget.
Du wirst da was falsch übergeben. Machs lieber wie im Beispiel.

[ - Antworten - Zitieren - Direktlink - ]

31.12.2006, 14:50 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von MaikG:
>Z.b. ist beim zweiten Programmstart der Text verschoben. Wie kann denn das passieren?

Nach mehrmaligen Starten war kein Standard Text mehr im Text-Gadget.
Du wirst da was falsch übergeben. Machs lieber wie im Beispiel.


Ja, ich hab zwar ne leise Ahnung was das sein könnte, aber ich kann es mir dennoch kaum vorstellen, da die ng-Struktur ja nur die Vorlage ist. Oder arbeitet gadtools mit dem Zeiger auf denn Text? Denn dann würde es das wirklich sein.

Wegen dem Beispiel von MaxonBasic:

Ist dir mal aufgefallen wie die es gemacht haben? Die füllen eine MaxonBasic-Array(2Byte pro Feld) mit den Daten und übergeben dann dieses Feld. Das hat auch zur Folge das man z.b. GadGetID plötzlich nur noch 16Bit möglich ist, statt 32 (ok, nicht so wichtig, aber ist mir auch gleich aufgefallen). Bzw. das alle Werte 16bittig sind.

Ok, das Demo scheint zu laufen, aber was macht das Demo bei der Textübergabe anderst?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

31.12.2006, 17:34 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Genauergetippt ist kein Text zu sehn und wenn ich nichts in die Gadget eingebe, dann wird dann auch beim auslesen der Gadgets nicht angegeben, obwohl ich ein Defaulttext drin stehn habe. Ich vermute mal das ich den Text falsch übergebe. Aber wieso läuft es dann nur bei mir nicht und bei euch richtig?


Bei mir läuft's "richtig", weil ich gar nicht erwartet habe, dass da ein Text drin stehen soll, denn Du übergibst ja auch keinen. Der Text für ein String-Gadget muss in der TagList via GTST_String übergeben werden. Er wird dann auch kopiert.

Dass der in der NewGadget Struktur enthaltene Text sporadisch zu sehen ist, statt ignoriert zu werden, scheint mir ein Bug in gadtools zu sein. Der ist mir nicht aufgefallen, weil es bei mir erst heute mal passiert ist. Da dieser Text aber nur über das Gadget drübergezeichnet wird, und nicht im StringGadget enthalten ist, bekommst Du ihn auch nicht beim Auslesen zurück.

Du solltest den ng_GadgetText Eintrag der NewGadget-Struktur am Besten auf NULL setzen, wenn Du ein String-Gadget anlegst.
Zitat:
Original von Ralf27:
Das hat auch zur Folge das man z.b. GadGetID plötzlich nur noch 16Bit möglich ist, statt 32 (ok, nicht so wichtig, aber ist mir auch gleich aufgefallen).


Was meinst Du? Die Gadget-ID ist 16 Bit breit. Du benutzt in Deinem eigenen Programm ja auch POKEW/PEEKW.
Wenn Du mehr willst, musst Du den UserData Pointer benutzen.

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

[ - Antworten - Zitieren - Direktlink - ]

31.12.2006, 17:49 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Holger:
Bei mir läuft's "richtig", weil ich gar nicht erwartet habe, dass da ein Text drin stehen soll, denn Du übergibst ja auch keinen. Der Text für ein String-Gadget muss in der TagList via GTST_String übergeben werden. Er wird dann auch kopiert.

Oh, hm, danke. Das hab ich dann total vergessen. Ich dachte der GadgetText wäre der Text. Werd ich gleich mal umsetzen.
Zitat:
Dass der in der NewGadget Struktur enthaltene Text sporadisch zu sehen ist, statt ignoriert zu werden, scheint mir ein Bug in gadtools zu sein. Der ist mir nicht aufgefallen, weil es bei mir erst heute mal passiert ist. Da dieser Text aber nur über das Gadget drübergezeichnet wird, und nicht im StringGadget enthalten ist, bekommst Du ihn auch nicht beim Auslesen zurück.
Beim ersten Programmstart wurde dieser Text ausgegeben (wohl auch bei MaikG) und ich dachte das ich was falsch gemacht habe. Aber das ich was vergessen habe... :) Ist für mich mal was neues das ein Bug mal nicht in meinem Programm sondern extern vorliegt. :D
Zitat:
Du solltest den ng_GadgetText Eintrag der NewGadget-Struktur am Besten auf NULL setzen, wenn Du ein String-Gadget anlegst.
Werd ich dann wohl auch am besten machen.
Zitat:
Was meinst Du? Die Gadget-ID ist 16 Bit breit. Du benutzt in Deinem eigenen Programm ja auch POKEW/PEEKW.
Wenn Du mehr willst, musst Du den UserData Pointer benutzen.

Da hast du natürlich recht, ein Fehler von mir. Es gibt aber auch andere Einträge in dieser Struktur die nicht 16Bit breit sind. Wie z.b. der Eintrag des Textes, der ein Zeiger a la 32Bit ist. Deswegen wohl auch im MaxonBasic-Demo die seltsame Umsetzung.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

31.12.2006, 18:13 Uhr

Ralf27
Posts: 2779
Nutzer
Ja, jetzt läuft es so wie es soll. Danke.

Woher kann man denn eigentlich noch mehr Infos über gadtools(wenn möglich bitte auf deutsch :) ) bekommen?

Die ganze GadTools-Gadgetstory soll übrigens später mal die ID und Port abfragen. Zur Zeit frag ich diese in der aktuellen Netzwerkversion von Sudoku behelfsmäßig mit Basicmitteln ab.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 [ - Beitrag schreiben - ]


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


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