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

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

-1- [ - Beitrag schreiben - ]

01.11.2006, 20:18 Uhr

bubblebobble
Posts: 707
Nutzer
Hallo !

Wie erstelle oder verändere ich ein Tooltype in einem Icon ?
Auslesen ist kein Proglem, dafür bietet die icon.library
entsprechende Befehle (FindToolType, MatchToolType).
Aber zum Schreiben nicht.

Muss ich die DiskObject Structur per Hand verändern ?

___________________________________________________

struct DiskObject *icon = GetDiskObject(name);

; ... manipulieren, aber wie ? ...

PutDiskObject (name,icon);
FreeDiskObject (icon);
____________________________________________________


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

01.11.2006, 21:16 Uhr

bubblebobble
Posts: 707
Nutzer
Ich habe das jetzt mal so implementiert, dass ich die Toolstrings
manuell austausche. Unter OS3.9 funktioniert das auch.
Aber ich weiss nicht ob das unter OS4/MOS geht.
Schön ist das nicht. Ein OS Befehl dafür wäre mir lieber.

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

01.11.2006, 22:35 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
Ich habe das jetzt mal so implementiert, dass ich die Toolstrings
manuell austausche. Unter OS3.9 funktioniert das auch.
Aber ich weiss nicht ob das unter OS4/MOS geht.
Schön ist das nicht. Ein OS Befehl dafür wäre mir lieber.


AFAIK ist es nur ein Zeiger auf ein Array von Pointern auf Strings, eine NULL sollte das ander der ToolTypes signalisieren.

code:
char      *TTypes[] = {
 "ToolType 1",
 "ToolType 2",
 ...
 "ToolType N",
NULL, };

icon->do_ToolTypes = &TTypes;


Da MOS/OS4 wohl auch Icons schreiben können müssen die Wohlgedrungen auch ToolTypes unterstützen. Aber wie gesagt ausprobiert hab Ich's nicht.

[ Dieser Beitrag wurde von DariusBrewka am 01.11.2006 um 22:35 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

01.11.2006, 22:56 Uhr

bubblebobble
Posts: 707
Nutzer
Ja, so habe ich das auch manuell implementiert.
Aber ich finde das schon heikel.
Im RKM steht z.B. nichts davon, dass dieses Array mit NULL abschliesst, was man sich zwar denken kann,
aber theoretisch kann man das auch anders lösen, indem man z.B. irgendwo die antahl der Einträge vermerkt.

Ausserdem muss man im Falle einer Änderung das Tooltype selbst suchen und überschreiben, also man muss nach "=" suchen und alles selbst abschneiden.
Was soll man z.B. mit dem "alten" Eintrag String machen ?
FreeMem() oder FreeVec() oder lieber in Ruhe lassen ?

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

02.11.2006, 00:12 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
Was soll man z.B. mit dem "alten" Eintrag String machen ?
FreeMem() oder FreeVec() oder lieber in Ruhe lassen ?


da hast du Natürlich recht, ggf das Icon mittels DupDiskObject() (OS3.5/9) duplizieren (mit ICONDUPA_DuplicateToolTypes = FALSE), dann hat das Icon keine ToolTypes mehr und du kannst die Sicher hinzufügen.

Ich vermute aber mal ganz Stark, das ein Icon an einen Stück in den Speicher geladen wird und die ToolTypes nicht im speicher verstreut sind, daß ein FreeDiskObject() die Strings nicht einfach einzeln freigibt -> du brauchst die nicht freigeben bzw. einfach neu setzen.

[ Dieser Beitrag wurde von DariusBrewka am 02.11.2006 um 00:20 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

02.11.2006, 00:14 Uhr

malte2
Posts: 148
Nutzer
@bubblebobble:

Um die alten TTs brauchst Du nicht zu kümmern, die werden über die FreeList des Icons automatisch freigegeben.

[ - Antworten - Zitieren - Direktlink - ]

02.11.2006, 09:14 Uhr

gni
Posts: 1106
Nutzer
Zitat:
bubblebobble:
Ausserdem muss man im Falle einer Änderung das Tooltype selbst suchen und überschreiben, also man muss nach "=" suchen und alles selbst abschneiden.
Was soll man z.B. mit dem "alten" Eintrag String machen ?
FreeMem() oder FreeVec() oder lieber in Ruhe lassen ?

Was ist daran so kompliziert? Das originale Array wird _nicht_ modifiziert. Du sicherst den Zeiger auf das Original, trägst Dein neues Array ein und nach PutDiskObject() wird wieder der Originalwert eingetragen. Wie Du mit dem von Dir erstellten Array verfahren mußt, weist Du am besten.

[ - Antworten - Zitieren - Direktlink - ]

02.11.2006, 18:44 Uhr

bubblebobble
Posts: 707
Nutzer
Soll ich nur das Array mit den Pointer clonen oder auch die Strings ?

Im Moment mache ich es so, dass wenn ich das Tooltype schon finde,
dann ersetze ich nur den Stringpointer auf meinen neuen String.
Wenn nicht, lege ich ein neues Array an, was 4 Bytes größer ist, kopiere die alten Pointer rüber und hänge mein Tooltype am Ende dran.
Dann tausche ich es aus, fertig.


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

02.11.2006, 20:54 Uhr

thomas
Posts: 7675
Nutzer
@bubblebobble:

Du kannst machen, was du willst. Alles was bei GetDiskObject allokiert wurde, wird bei FreeDiskObject automatisch freigegeben, egal, welche Änderungen du gemacht hast. PutDiskObject interessiert sich dafür nicht, es nimmt nur den Array und speichert die Tooltypes, egal ob die Pointer auf die Original-Strings zeigen oder auf deine eigenen. Du mußt nur dafür sorgen, daß der Speicher, den du allokiert hast, auch von dir freigegeben wird.

Irgendwo in den Autodocs steht, daß hinter dem struct DiskObject im Speicher eine struct FreeList angelegt wird, die bei FreeDiskObject zum Freigeben des Speichers benutzt wird. Man könnte also theoretisch seine eigenen Allokationen dort mit anhängen, sodaß sie von FreeDiskObject mit freigegeben werden. Aber Achtung: das funktioniert nicht unter MorphOS ! Wenn man es da versucht, gibt es einen Absturz.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

02.11.2006, 21:03 Uhr

bubblebobble
Posts: 707
Nutzer
@thomas
Vielleicht lags daran. Ich fixe ja gerade ein Problem in zusammenhang mit MOS.
D.h. nachdem ich PutDiskObject gemacht habe und evtl. noch FreeDiskObject, sollte ich meine eigenen Strings wieder freigeben, das wird nicht vom FreeDiskObject gemacht, obwohl der String in der Strukur eingetragen ist ?

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

03.11.2006, 07:44 Uhr

thomas
Posts: 7675
Nutzer
@bubblebobble:
Zitat:
D.h. nachdem ich PutDiskObject gemacht habe und evtl. noch FreeDiskObject, sollte ich meine eigenen Strings wieder freigeben, das wird nicht vom FreeDiskObject gemacht, obwohl der String in der Strukur eingetragen ist ?

Exakt. FreeDiskObject weiß ja gar nicht, wie der String da hingekommen ist oder wie er allokiert wurde. Es könnte ja genausogut eine Konstante aus deinem Programm oder ein Stück von deinem Stack sein.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

03.11.2006, 23:53 Uhr

bubblebobble
Posts: 707
Nutzer
Danke, Leute. Jetzt lupped' auch unter MOS!

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


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


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