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

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

1 2 -3- 4 5 6 7 8 >> Letzte Ergebnisse der Suche: 1229 Treffer (30 pro Seite)
Der_Wanderer   Nutzer

10.02.2012, 13:39 Uhr

[ - Direktlink - ]
Thema: HD-REC
Brett: Amiga, AmigaOS 4

Ja, habe ich auch gemerkt. TBImages: ist der Assign von AISS.
Man sollte den nicht wahllos auf irgendein Verzeichnis setzen, in dem AISS gar nicht installiert ist. Wenn man das ablehnt, dann startet HD-Rec mit den eigenen Grafiken.
Ich muss den Requester noch unterdrücken.

Wenn AISS installiert ist, werden die AISS Bilder genutzt.

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

 
Der_Wanderer   Nutzer

09.02.2012, 13:36 Uhr

[ - Direktlink - ]
Thema: HD-REC
Brett: Amiga, AmigaOS 4

Hm, ich habe kein OS4, aber ich kann dir etwas antworten:

HD-Rec nutzt AHI zur Aufnahme. Wenn es also einen AHI Treiber gibt, dann kann man damit aufnehmen. Gleiches gilt für MIDI via CAMD.

Mit HD-Rec kannst du auch den Bass bearbeiten (Schneiden, Compressor, EQ, Effekte etc.) und z.B. als wav exportieren.
Des weiteren kannst du erstmal einen Softsynth wie den Sweeper probieren, vielleicht reicht dir das ja. Der SAM ist zwar nicht der schnellste, aber eine Drum-Spur sollte drin sein.

Softsynths haben riesige Vorteile in der Handhabung.

- speichern alles mit dem Projekt
- sample-exaktes Timing
- kostet nichts
- braucht kein Platz
- kann nicht kaputt gehen
- skaliert mit deiner CPU

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

 
Der_Wanderer   Nutzer

01.02.2012, 09:30 Uhr

[ - Direktlink - ]
Thema: Dateiname rüber ziehen, wie?
Brett: Programmierung

Das gleiche Problem hättest du, wenn jemand Dateien verändert mit einem beliebigen Programm. Das muss man entweder hinnehmen, oder man richtet ein sog. File Notify ein, dann bekommt man vom AmigaOS eine Message, wenn sich in einem Verzeichnis was geändert hat.
Habe ich selbst aber noch nicht ausprobiert.

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

 
Der_Wanderer   Nutzer

29.01.2012, 11:42 Uhr

[ - Direktlink - ]
Thema: Dateiname rüber ziehen, wie?
Brett: Programmierung

Also

1. Der Drag&Drop Vorgang sollte komplett im Kontext des Quellobjektes laufen. So wie jeder andere Vorgang auf einem Objekt.

2. Fenster solltest du keine aktivieren oder deaktivieren. Das könnte zu unerwünschten Nebeneffekten führen.

3. Das mit dem "Magic Cookie" hatte ich "Rendevouz ID" genannt. So kann das Toolkit herausfinden, ob Quellobjekt und Zielobjekt kompatibel sind.

4. Ich würde eine "DropAttempt" Message machen, die ein Objekt bekommt um zu sehen ob, es das Drop überhaupt will. So kann auch das Zielobjekt selbst überprüfen, ob die Rendevouz ID im Event mit dem eigenen übereinstimmt. Dadurch muss das Quellobjekt keine Annahmen über die Strukur des Zielobjektes machen. (=> wichtig für robusten, erweiterbaren Code).
Je nach Resultat kann dann der Mauspfeil Ok oder nicht-Ok anzeigen.

5. Beim Loslassen gibts dann eine "Drop" Message an das Zielobjekt.
Die Dropmessage muss alle Informationen enthalten, die nötig sind, um das durchzuführen. Ein Zugriff auf das Quellobjekt wäre besser zu vermeiden.

6. Die App bekommt im Moment des "Drop" von der Aktion mit. (onDrop)
Als Callback oder Notify. Daraufhin managed die App, was eigentlich passiert. Die Objekte sollte da nichts "auf eigene Faust" versuchen. So ein Drag&Drop kann sehr unterschiedliche Aktionen erfordern, sodass nur die App das regeln kann.

7. Icons würde ich keine machen, nicht jeder Drag&Drop Vorgang mit Icons verbunden ist. Ich glaube du versteifst dich zu sehr auf den Fall eines Filemanagers.




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

 
Der_Wanderer   Nutzer

27.01.2012, 20:00 Uhr

[ - Direktlink - ]
Thema: Dateiname rüber ziehen, wie?
Brett: Programmierung

Ich verstehe nicht warum du dich da so abquälst. Nimm doch einen Mauspfeil, das schon auch die Resourcen. Das mit dem Icons geht sowieso nur, wenn es ein Icon gibt. Was machst du bei ListView Einträgen ohne Icon, oder mit mehreren Icons, oder wenn es was ganz anderes ist?

Was mich interessiert ist, wie detektierst du über welchem Objekt du bist, du hattest erwähnt du würdest kein WhichLayer() benötigen?

Und wie detektierst du Objekte aus einem anderen Programm?
Hast du Kenntnis über dessen GUI Struktur? Das würde aber einiges an Syncrhonisierungsaufwand kosten.




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

 
Der_Wanderer   Nutzer

27.01.2012, 14:51 Uhr

[ - Direktlink - ]
Thema: Dateiname rüber ziehen, wie?
Brett: Programmierung

Warum willst nutzt du nicht einfach einen Mousepointer, der einen Drag&Drop Vorgang symbolisiert. So ist das auch unter Windows und es hat sich noch keiner dran gestört. Und du musst nicht zu solchen "Technischen Stunts" greifen die mit Sicherheit hier und da Probleme bereiten werden.
Den Code kannst du dann auch getrost im ListView haben, und musst keine Kopfstände machen um irgendwie einen weiteren Task ins Spiel zu bringen der über das input.device Events parst.
Das Drag&Drop ist sowieso recht spezifisch, das wäre unverhältnismässig kompliziert da etwas generelles zu versuchen. Eine Funktion die den Mauspfeil setzt und eine andere die das Objekt unterhalb bestimmter Koordinaten unabhängig vom aktiven Fenster ermittelt reicht schon.
Das Fenster ansich mit deinen IDCMP Events ist völlig ausreichend. Wie bereits vor mir jemand erwähnt hat, wenn der Fokus verloren geht sollte der Vorgang ohnehin abgebrochen werden.

Was ich anfangs schrieb, was viel interessanter ist, wie verknüpft man vom Design her die einzelnen Elemente. Was muss der GUI Designer machen, was muss der App Entwickler machen, und wie findet das ganze zusammen.

Was will man mit Drag&Drop überhaupt erreichen? Welche Use-Cases gibt es?


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

 
Der_Wanderer   Nutzer

23.01.2012, 13:04 Uhr

[ - Direktlink - ]
Thema: Etwas nach Programmende im Speicher behalten... ?
Brett: Programmierung

Dein Programm muss im Speicher bleiben.

Sonst ist ja auch der Code weg.


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

 
Der_Wanderer   Nutzer

18.01.2012, 21:22 Uhr

[ - Direktlink - ]
Thema: TextLenght() ohne window/screen?
Brett: Programmierung

Es gibt zumindest die Möglichkeit, an die System FOnt zu kommen, ganz ohne Screen:

code:
InitRastPort_ rp.RastPort
  AskFont_ rp,ta
  *font = OpenDiskFont_(ta)


Das ist aber nicht die Screen Font des WB Screens.

Da AGSzabo ein GUI Toolkit schreibt so wie ich, kann ich empfehlen:

Das Toolkit sollte seine eigene(n) Font(s) öffnen, keine Pointer-Kopie machen, da die Pointer jederzeit ungültig werden können, die Font gehört schließlich jemand anderem. Nur eine selbst geöffnete Font gehört dir selbst.
Welche Font das ist, sollte aus dem GUI Toolkit Voreinstellungen kommen.
Wenn dort nichts brauchbares eingestellt ist (Font die es nicht gibt oder keine Konfigurationsdatei), dann kann man sich die Font vom WB Screen clonen (wie gesagt clonen, nicht den Pointer kopieren.
D.h. man besorgt sich den Namen und die Größe der Font und öffnet dann selbst mit OpenDiskFont.
Das muss ja nicht der Screen sein, auf dem sich die App öffnen wird.

NTUI kennt 4 default fonts:
- normal font
- fixed font
- small font
- serif font

Die normal Font nimmt als Fallback die Workbench Screen Font.
Die fixed Font nimmt als Fallback die AmigaOS System Font.
Die small Font nimmt die normale Font mit 2/3 der Höhe.
Die serif Font nummt auch wie Workbench Font als Fallback. (ist natürlich nicht richtig, aber AmigaOS hat leider kein Konzept von Font Familien.
Aber dafür gibts ja dann den Toolkit eigenen Einsteller.

EDIT: Achja, also Layouten musst (und kannst) du ja erst, wenn du den Screen weist wo du hin willst.
Ich denke mal auch dass die TextLength() Funktion mit einem RastPort verknüfpt ist, weil u.U. sich daraus andere Größen ergeben können.
Ist in der Praxis wohl nie der Fall, aber z.B. gäbe es sowas wie Outline, Shadow oder DPI Angaben für RastPorts, dann könnten die Pixelgrößen sich durchaus ändern, je nachdem wie der RastPort konfiguriert ist.

Das heißt ja nicht, dass du nicht schon deine GUI Elemente initialisieren kannst. Aber layouted wird erst unmittelbar bevor du das Fenster öffnest.

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



[ Dieser Beitrag wurde von Der_Wanderer am 18.01.2012 um 21:26 Uhr geändert. ]
 
Der_Wanderer   Nutzer

18.01.2012, 17:51 Uhr

[ - Direktlink - ]
Thema: TextLenght() ohne window/screen?
Brett: Programmierung

So kommt man an die Fonts ran (NTUI source)
Die Funktion öffnet eine Font. Wenn die nicht gefunden wird, dann wird die Screenfont (wie im Menu) gesucht, und wenn die nicht geht dann die System Font (wie in der Shell)

code:
;///////////////////////////////////////////////////////////////////////////////
;/                                                                             /
;/ Syntax: result.l = _ntui_OpenFont {fontname.s,size.l,flags.l,*scr.Screen}   /
;/                                                                             /
;/ Description:                                                                /
;/ private: open a font for later use in NTUI                                  /
;/                                                                             /
;/ Inputs:                                                                     /
;/ - fontname.s   : name of the font (e.g. "topaz.font")                       /
;/ - size.l       : size of the font (e.g. 8)                                   /
;/ - flags.l      : ntui style flags of the font (e.g. #TUIF_BOLD)             /
;/ - *scr.Screen  : optional screen from were to get the default if this fails /
;/                                                                             /
;/ Result:                                                                     /
;/ - *font.TextFont : font handle                                              /
;/                                                                             /
;///////////////////////////////////////////////////////////////////////////////
Function.l _ntui_OpenFont{*fontnameS.str,size.l,flags.l,*scr.Screen}
DEFTYPE.TextAttr ta

*font.TextFont=#NULL

style.l = 0
If flags&#TUIF_BOLD    Then style | #FSF_BOLD
If flags&#TUIF_ITALIC  Then style | #FSF_ITALIC
If size<6 Then size=6
fontname.s = str_Read{&*fontnameS}

If fontname
  If (LCase$(Right$(fontname,5))><".font") Then fontname = fontname+".font"
  ta\ta_Name  = &fontname
  ta\ta_YSize = size          ;/* height of the font */
  ta\ta_Style = style         ;/* intrinsic font style */
  ta\ta_Flags = #FPF_DISKFONT ;|#FPF_PROPORTIONAL      ;/* font preferences and flags */
  *font = OpenDiskFont_(ta)
End If

If (*font=#NULL) AND ((flags&#TUIF_FIX)=0) ;/* if font cannot be opened, try the screen font */
  If *scr><#NULL
    size = *scr\Font\ta_YSize
    If (flags&#TUIF_SMALL) Then size*2/3 : If size<6 Then size=6
    ta\ta_Name  = *scr\Font\ta_Name
    ta\ta_YSize = size
    ta\ta_Style = style
    ta\ta_Flags = *scr\Font\ta_Flags
    *font = OpenDiskFont_(ta)
  End If
End If

If (*font=#NULL) AND ((flags&#TUIF_FIX)=0);/* if font cannot be opened, try the screen font wihtout styles*/
  If *scr><#NULL
    *font = OpenDiskFont_(*scr\Font)
  End If
End If

;If *font=#NULL ;/* if font still cannot be opened, try the default gfx font */
;  *gfxbase.GfxBase = OpenLibrary_ ("graphics.library",0)
;  If *gfxbase
;    *font = *gfxbase\DefaultFont
;  End If
;  CloseLibrary_ *gfxbase
;End If

If (*font=#NULL) ;/* if font still cannot be opened, try the default gfx font */
  InitRastPort_ rp.RastPort
  AskFont_ rp,ta ; might be better
  ta\ta_Style = style
  *font = OpenDiskFont_(ta)
End If

If (*font=#NULL) ;/* if font still cannot be opened, try the default gfx font wihtout styles*/
  InitRastPort_ rp.RastPort
  AskFont_ rp,ta ; might be better
  *font = OpenDiskFont_(ta)
End If

Function Return *font
End Function


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



[ Dieser Beitrag wurde von Der_Wanderer am 18.01.2012 um 17:53 Uhr geändert. ]
 
Der_Wanderer   Nutzer

17.01.2012, 16:48 Uhr

[ - Direktlink - ]
Thema: Dateiname rüber ziehen, wie?
Brett: Programmierung

Das mit dem MIME typen ist eine gute Idee.
Allerdings will man meistens gar keine Daten übertragen, sondern nur Indizes verschieben. Z.b. innerhalb eines ListView sortieren, oder von einem ListView in den anderen, wobei dann die App entscheiden muss, um was es hier eigentlich geht (z.b. eine Datei soll verschoben/kopiert/gelöscht werden, oder ein Bild soll angezeigt werden)

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

 
Der_Wanderer   Nutzer

16.01.2012, 11:11 Uhr

[ - Direktlink - ]
Thema: moeglichkeiten ein image zu laden
Brett: Programmierung

Alphakanal geht erst unter OS4, MOS, AROS oder wenn man AfA+Datatype Replacement hat. Wenn also 68K als Zielplatform mit drin sein soll, kannst du Datatypes nicht nehmen.
Ich habe mir für den Zweck einen eigenen PNG Codec geschrieben. Ist blöd und Zeitverschwendung, ich weis, aber anders geht es nicht.
Wenn man C benutzt kann man auch PNG als static library einbinden.

Auch bei Icons kommt man nur beschwerlich an die Rohdaten (CMIIW).
Ich nutze da den Trick, das Icon einmal auf weis (0xFFFFFF) und einmal auf schwarz (0x000000) malen zu lassen (DrawIconState), dann ziehe ich die beiden Bitmaps voneinander ab. Das Ergebnis ist dann der (invertierte) Alphakanal.
Die 3 Farbkanäle bekommt man dann von dem schwarzen Bild, indem man die Farbe durch den Alphawert dividiert. (bei 0 muss man natürlich auf eine Farbe ausweichen, z.B. schwarz).
Nebeneffekt: so kommt man ohne Fallunterscheidung an alle Icons und bekommt einen Alphakanal, egal ob PNG Icons, GlowIcons, 4-Farb Icons etc.)

Zum Blitten:
OS3.x hat dafür keinen Befehl. OS4, MOS, AROS und AfA haben da wohl was (WritePixelArrayAlpha ??)
Händisch:
Zielbitmap mit ReadPixelArray in einen temporären Buffer lesen, Bildchen draufmalen per Hand (for (x=0; x<w; x++) ...) und mit WritePixelArray wieder zurückschicken.

Datatypes würde ich das Rendern nicht überlassen, sonst wirds bei vielen Usern nicht korrekt aussehen. Eines der Nachteile von Datatpyes ist, dass es viele verschiedene, mehr oder weniger vollständige Implementierungen gibt, sodass man nie wirklich sagen kann, was passieren wird.

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


[ Dieser Beitrag wurde von Der_Wanderer am 16.01.2012 um 11:17 Uhr geändert. ]
 
Der_Wanderer   Nutzer

15.01.2012, 23:23 Uhr

[ - Direktlink - ]
Thema: Dateiname rüber ziehen, wie?
Brett: Programmierung

Was hat im alten DirOpus funktioniert?

Was ich meine, die grafische Representation ist eine Sache, ich denke ein Mauspfeil reicht da aus.
Aber woher weis die GUI, von wo nach wo man Drag&Drop machen kann, und was dann passieren soll? Wie teilst du das der Applikation mit, und wie wird das definiert.

Ich könnte mir folgendes vorstellen (aber evtl. denke ich da zu kompliziert):

Man definiert drag&drop IDs, quasi "Rendevouz IDs".
Passt das dragID zu dem dropID eines anderen Objektes, dann kann man Drag&Drop machen und der Mauspfeil kann das auch gleich anzeigen. Das eine Objekt bekommt dann ein "Drag" Event, das andere ein "Drop" Event, und der User kann dann entscheiden was er damit tut.

Z.B.

code:
<listview id="inbox"   dragID="Emails">
<listview id="archive" dropID="Emails" >


Nebeneffekt ist, wenn dann ein ListView dragID und dropID gleich definiert hat, kann man auch innerhalb der Liste per drag&drop sortieren (vorrausgesetzt, die Liste ist unsortiert).

Man könnte über den mechnanismus auch gleich App Drag&Drop abfrühstücken, indem man z.B. dropID="FileDrop" definiert, dann kommt über den gleichen Kanal auch ein Workbench Icon Drop.

Die Informationen über das Drag&Drop Eintrag stehen dann in dem Event drin, in NTUI wäre das der Event String und Int Value.

Wenn die drag&drop IDs stimmen könnte man so auch Daten zwischen zwei Apps austauschen. Die müssen natürlich dafür auch gemacht sein.

Man könnte natürlich auch das Clipboard bemühen, sodass die Apps nichts voneinander wissen. Aber ist das sinnvoll? Ich meine, wie soll man sinnvoll auf einen Drag&Drop reagieren wenn man ein Listview Eintrag in einen anderen ListView schiebt, der was ganz anderes macht. In der Regel will man Drag&Drop doch eher für Dinge, die genau dafür gemacht sind, es sei denn man will wirklich nur einen String oder einen Dateinamen übertragen.

Weis jemand wie das MUI macht?

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



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

[ Dieser Beitrag wurde von Der_Wanderer am 15.01.2012 um 23:32 Uhr geändert. ]
 
Der_Wanderer   Nutzer

15.01.2012, 23:06 Uhr

[ - Direktlink - ]
Thema: Ist das Volume eine RamDisk?
Brett: Programmierung

Warum nimmst du nicht die "echten" Icons? Das sollte dann dem User immer "bekannt" vorkommen.

Bild: http://www.hd-rec.de/pics/FileRequester.png

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

 
Der_Wanderer   Nutzer

15.01.2012, 12:13 Uhr

[ - Direktlink - ]
Thema: Dateiname rüber ziehen, wie?
Brett: Programmierung

Da ich das gleiche Problem bei NTUI habe, hier meine Gedanken dazu:

1. Alles, was mit dem Fenster RastPort zu tun hat scheidet aus, da du möglicherweise über Fenstergrenzen Hinaus willst (Bobs).

2. Icons wäre irgendwie intuitiv, aber ich glaube AmigaOS stellt da nichts nach außen zur Verfügung, das ist eine reine Workbench interne Sache (korrigiert mich, wenn ich falsch liege).
Ausserdem hat das den Nachteil, dass der Screen Layer (oder ich glaube sogar gleich die ganze IntuiBase) gelockt wird, sodass in der Zeit keine anderen Grafikausgaben möglich sind. Das passiert, weil ja auf dem Screen RastPort gemalt wird.

3. Zuerst erschien mir ein kleines, rahmenloses Fenster gut geeignet, das nutze ich auch um z.B. Tooltips anzuzeigen. Wenn das verschoben wird, kann das allerdings recht CPU intensiv werden, je nachdem was drunter liegt, und damit ruckelig.

4. Letztendlich scheint mir praktikabel und performant zu sein, einfach den Mousepointer einen Drag&Drop Vorgang anzuzeigen. So ist das bei Windows meistens auch (wenn es sich nicht um Icons handelt).
D.h. man zeigt irgendwas mit verschieben und einem Fragezeichen, wenn es über einem Feld ist wo man es loslassen kann evtl. noch verändern.

Was ich für interessanter halte als das grafische Anzeigen des Drag&Drop, wie man die Felder eigentlich miteinander verknüpft.


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



[ Dieser Beitrag wurde von Der_Wanderer am 15.01.2012 um 12:14 Uhr geändert. ]
 
Der_Wanderer   Nutzer

30.12.2011, 23:10 Uhr

[ - Direktlink - ]
Thema: add Node to List sorted Algorithmus
Brett: Programmierung

Deine Vergleichsfunktion muss bei Verzeichnissen größer (oder kleiner) als Files zurückgeben. Die Vergleichsfunktion muss also die Information haben.
Im simpelsten Fall stellst du jedem Verzeichnis ein "a" vornedran, und jedem File ein "b". Aber ich würde das als extra Parameter für die Vergleichsfunktion machen.

... oder, wenn es fix immer diese Zeit Kategorien gibt, dann lege einfach zwei Listen an.

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



[ Dieser Beitrag wurde von Der_Wanderer am 30.12.2011 um 23:11 Uhr geändert. ]
 
Der_Wanderer   Nutzer

30.12.2011, 21:59 Uhr

[ - Direktlink - ]
Thema: add Node to List sorted Algorithmus
Brett: Programmierung

Ich würde auf jedenfall das Sortieren auf O(n*log(n)) drücken, d.h. Quicksort oder Binärsuche (http://de.wikipedia.org/wiki/Bin%C3%A4re_Suche) zum Einfügen.
Du musst für den Fall optimieren, wenn es viele Einträge sind, nicht versuchen zu sparen wenn es wenig Einträge sind. Wenn es wenige sind, dann ist es immer schnell genug.


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



[ Dieser Beitrag wurde von Der_Wanderer am 30.12.2011 um 22:00 Uhr geändert. ]
 
Der_Wanderer   Nutzer

28.12.2011, 12:30 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Nein, das Signal ist nicht an der Instabilität schuld. Das kann höchstens daran schuld sein, das zu oft refreshed wird oder so.

Wenn es instabil ist (ich schliesse jetzt mal single-threaded programmierfehler aus), dann liegt es an einer sog. "Race-Condition", d.h. etwas stimmt in der Logiki mit den Semaphoren nicht.

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

 
Der_Wanderer   Nutzer

28.12.2011, 11:17 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Dein Code ist vermutlich nicht threadsafe.
Paralleles Programmieren erfordert eine genaues Verständnis und Erfahrung dessen, was man da macht. Evtl. machst du das doch lieber Single threaded?


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

 
Der_Wanderer   Nutzer

26.12.2011, 10:49 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

> kann er nicht das dir einlesen.
Vielleicht ist das dein Problem. Du solltest "AtemptSemaphore()" machen, nicht "ObtainSemaphore". Dann schaut er nur nach, ob die Semaphore gerade frei ist, und wenn nicht, dann fügst du die Einträge eben nicht in den ListView sondern scannst erstmal weiter.
Stimmt schon, dass das bei einem Single Core relativ selten passiert, evtl. verschätze ich mich da.

Die INTUITICKS sollten genau richtig kommen. Wenn die zu oft kommen, dann stimmt irgendwas nicht. Die sollten so in etwa mit 5Hz kommen.
Ein Refresh von 1 oder 2 Hz würde ich etwas langsam finden.

Aber du sagst ja, dass selbst das einen fühlbaren Slowdown bringt, das ist seltsam, es sei denn dein Refresh würde wirklich sehr lange brauchen.

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

 
Der_Wanderer   Nutzer

25.12.2011, 21:22 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Das ListView sollte entweder die volle Kontrolle über die Daten haben (naive Methode), oder du implementierest einen "Adapter".

Der Adapter ist eine Art Callback Hook die der Anwender des GUI Toolkits schreibt, die dem Listview die Daten in dem Moment liefert, wo er sie haben will. So kann man unheimlich viel Resourcen sparen. Stell dir z.b. eine Liste mit 1 Mio Einträgen vor. Die Einträge stehen z.B. in einer Datenbank.
Wenn du ein Fenster öffnest mit einem Listview der die Anzeigen soll, und die werden erstmal alle in den Listview kopiert, verbraucht das massig Zeit und Speicher.
Mit einem Adapter würde der Listview nur gesagt bekommen dass es 1Mio Einträge sind, aber nur die erste handvoll anfragen, die sichtbar sind. Die anderen werden erst beim Durchscrollen angefragt.





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

 
Der_Wanderer   Nutzer

25.12.2011, 21:10 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Fang nicht mit verschiedenen "Modi" oder "Fast" oder sonstigen Ausnahmen an. Das bringt dich früher oder später zum Verzweifeln und würde dem Projekt einen sicheren, langsamen und obendrein qualvollen Tod bescheren.

Denke dran: "Don't optimize yet!".

Was du tun willst ist, unnötige Refreshes zu vermeiden, also einen bessere Strategie zu nutzen (also die Komplexität zu senken) anstatt den Code zu beschleunigen und dir dabei Restriktionen einzufahren. Habe ganz vergessen, das wir ja auf einem Single Core arbeiten, und daher das Refresh den Scan Task blockiert.
Also was kann man tun?

Jedes x-te mal refreshen kommt einem schnell in den Kopf, ist aber gar keine gute Idee. Denn wenn das Device sehr schnell ist, wird es immer noch deutlich ausgebremst, und wenn es sehr langsam ist, dann tröpfeln die Dateien unnötig langsam rein. Du würdest dann eine bestimmte Scann Geschwindigkeit annehmen, und sowas ist niemals eine gute Idee.
Sieht man leider immer wieder an alten Programmen, die annahmen du arbeitest mit einer Diskette und refreshen z.B. einen Progressbar alle 2KB, was damals dann vielleicht ok war, heute aber dazu führt dass der Progressbar Refresh 99% der Zeit in Anspruch nimmt.

Nein, eine Zeitmessung muss her, damit wir nicht sinnlos refreshen. Dafür gibt es die Intuiticks. Wenn ich mir das genau ansehe, ist auch die Refresh Rate des ASL in etwa die der IntuiTicks (geschätzte 5 Hz?)

Daher mein Vorschlag:

Lese die Liste ein OHNE erstmal pauschal einen Refresh Signal zu senden. Sende das Signal erst, wenn

a) der Scann zu Ende ist.
b) der GUI Task dich mit einem weiteren Signal "anpingt". Dieses Anpingen macht der GUI Task dann immer nur dann, wenn er eine IDCMP_INTUITICK Message bekommst.

Fall b) passiert nur, wenn das Fenster aktiv ist. Das finde ich persönlich aber ok so, denn wenn das Fenster nicht aktive ist, wird der User in der Regel sich auch nicht damit befassen und ein Echtzeit Refresh ist nicht wichtig.




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



[ Dieser Beitrag wurde von Der_Wanderer am 25.12.2011 um 21:16 Uhr geändert. ]
 
Der_Wanderer   Nutzer

23.12.2011, 23:00 Uhr

[ - Direktlink - ]
Thema: welche 2d/3d lib?
Brett: Programmierung

Popcorn! Da bin ich mal gespannt. Sehr gute Frage.

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

 
Der_Wanderer   Nutzer

23.12.2011, 11:35 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

@AGSzabo:

Korrekt, wenn du Threadsafe sein willst, dann müsstest du alle Resourcen die du benutzt locken, ja. Im einfachsten Fall machst du einen Lock für das ganze GUI System, aber dann würden sich u.U. Programme behindern.
Nächste Stufe wäre dann einen Lock pro Applikation. Oder man geht noch weiter runter und macht einen Lock auf jedes GUI Objekt, das ist aber etwas Overkill, weil dann jedes Objekt eine Semaphore braucht, und man kann schnell den Überblick verlieren was man nun alles Locken muss und was nicht. Ich denke pro Applikation ist ausreichend.

Wirklich schlimm ist das aber nicht. Im schlimmsten Fall erzwingst du eine Nacheinander-Ausführung wie in einem einzelnen Thread.

Natürlich ist das dann auch immer noch möglich, dass der Nutzer durch einen ListView scrollt, während neue Ergebnisse eingetragen werden. Der Lock wird ja nur innerhalb der Zeitspanne gemacht, wo neue Scan Einträge vorliegen bis die neuen Einträge in die Liste gehängt sind. Aber nicht für den ganzen Scan Vorgang.

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

 
Der_Wanderer   Nutzer

22.12.2011, 22:41 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Ja genau.

Zur Einfachheit würde es aber auch schon ausreichen, für die Engine-Instanz Global ein "lock" einzubauen. Sooo viele Requester hat man ja in einem Programm normalerweise nicht offen, als dass sich das spürbar auswirken würde.

Zu dem Lock:

Der GUI Thread sollte ein "ObtainSemaphore" machen, also wirklich blockieren bis er die Semaphore bekommt. Was halb-fertiges zeichnen macht auch keinen Sinn und würde zu viel Logik erfordern (und damit potentielle Bugs).

Die Semaphore kannst du je generell vor jedem Zeichenvorgang holen, so hast du den Mechanismus nicht nur für dein Listview sondern für alle Widgets.

Der Scan-Thread *könnte* auch ein ObtainSemaphore machen, allerdings stellt sich dann die Frage, wann soll er das machen. Wenn er das nach jedem Directory Eintrag machen würde, dann würde es jedesmal ein Refresh geben und ein weiterer Eintrag würde gescannt. In dem Fall ist das super langsam und man könnte das auch single Threaded machen.
Also macht du kein ObtainSempahore, sondern AttemptSemaphore. Das blockiert nicht,wenn die Semaphore gerade besetzt ist. Wenn du die dann nicht bekommst, darfst du natürlich nichts in den Listview hängen, da er gerade zeichnet. Aber du kannst ruhig weiter dein Directory lesen und den Eintrag erstmal lokal merken.
Sobald der Scan Thread dann "dran darf", also per AttemptSema die Sempahore bekommt, kann er alles, was sich aufgestaut hat, auf einen Rutsch in das Listview hängen, dann die Semaphore wieder Releasen und ein Refresh anstoßen, und dann weiterackern.

Wird der ListView zwischenzeitlich freigegeben, dann beendet sich der Scan-Thread einfach. Deshalb darf er sich nichts über das ListView merken ausserhalb des Attempt-Release Blocks. (z.b. den Pointer drauf.
Den muss er sich immer wieder neu besorgen. Wie er das macht, hängt von deinem GUI Toolkit ab.
Du könntest den Task auch explitzit beenden, indem du ihm ein Signal schickst, auf das er horcht. CTRL+C bietet sich in dem Fall eigenlich immer an.






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

 
Der_Wanderer   Nutzer

22.12.2011, 22:11 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Zitat:
Muss nun der Scan Task mit dem befüllen so warten solanbge gezeichnet wird, oder der Gui task mit dem Zeichnen warten solange befüllt wird?
Beides. Siehe auch http://de.wikipedia.org/wiki/Semaphor_(Informatik)

Was der Scan Task aber nicht muss ist warten mit dem Lesen des Directories, und das ist der Flaschenhals. So bekommst du optimale Füllgeschwindigkeit und jedesmal ein Refresh, wenn sich was getan hat.


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





[ Dieser Beitrag wurde von Der_Wanderer am 22.12.2011 um 22:12 Uhr geändert. ]
 
Der_Wanderer   Nutzer

22.12.2011, 21:56 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Das einfachste, um es Threadsafe zu bekommen ist, den Zugriff auf die Liste durch Semaphoren zu regeln. D.h. während gezeichnet wird, muss der Scann-Thread warten. Wenn er dann wieder "dran kommt", locked er die Semaphore und fügt seine bisher eingelesenen Einträge hinein und released wieder. Solange kann dann nicht refreshed werden.
Da das Hinzufügen in die Liste aber vermutlich sehr schnell geht, ist das kein Problem. Langsam, bzw. nicht vorhersehbar wie lange das dauert, ist das Scannen des Verzeichnisses, was dann aber die GUI nicht beeinträchtigt, selbst wenn es mal 10sec hängt (ja, bei Netzlaufwerken, WinUAE oder Disketten kann sowas schon mal eine Weile dauern...)

Wenn der Scann Thread "AttemptSempahore" nutzt, dann muss er nicht warten wenn die GUI gerade nue-zeichnet, sondern liesst dann eben den nächsten Eintrag, solange bis die GUI fertig ist. Dann fügt er seine Einträge hinzu und stößt einen Refresh an. Somit wird die Rechenleistung optimal ausgenutzt.
--
--
Author of
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de

 
Der_Wanderer   Nutzer

22.12.2011, 21:08 Uhr

[ - Direktlink - ]
Thema: filerequester task
Brett: Programmierung

Es gibt eine goldene Regel die da heißt: "Never block the main thread!"

Wenn ein Popup oder Auswahl Requester modal sein soll, dann setze für die anderen Fenster den Busy Pointer, wie thomas gesagt hat:
SetWindowPointer(window, WA_BusyPointer, TRUE, TAG_END)
Dann kann der Main Thread immer noch reagieren, z.B. auf Dinge wie Iconify oder eben andere Background Aufgaben weiterhin erledigen.

In eine Unterroutine springen und damit den Eigentlichen Message Loop verlassen ist ziemlich old-school und nicht sehr elegant, zumal man Code duplizieren muss, was eigentlich immer schlecht ist.

Den ListView würde ich als im ganz normalen Message Loop verwalten. Dazu würde ich dann einen Worker-Thread starten, der das Dateisystem scannt und den ListView befüttert.
Das ganze muss natürlich "threadsafe" passieren, was einiger programmier Erfahrung bedarf, aber natürlich immer eine gute Idee ist, wenn deine Engine multithreading unterstützt.

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



[ Dieser Beitrag wurde von Der_Wanderer am 22.12.2011 um 21:16 Uhr geändert. ]
 
Der_Wanderer   Nutzer

11.11.2011, 13:37 Uhr

[ - Direktlink - ]
Thema: BlackShoot läuft nicht mehr auf OS4.1
Brett: Amiga, AmigaOS 4

@whose

Ich hatte mich darauf bezogen:

> habe den Fehler gefunden, in Prefs/env/SYS stand eine screens.prefs, die gab es auf der neuen OS 4.1 Installation nicht, auf der alten Partition habe ich screens.prefs umbenannt,Neustart gemacht und BlackShoot startet wieder einwandfrei.

Ich bin mir aber nicht sicher ob ich das richtig interpretiert habe. Kam durch diese Aktion ein Screenmodus wieder dazu, den es vorher nicht gab?

Die Rückgabe von BestModeID() wird natürlich geprüft.
Allerdings weis ich nicht, ob Blackbird nicht trotzdem weitermacht...
Ich denke aber ehr nicht.

Dass man bei einem zu grossen Screen das Spielfeld doppelt sieht ist wegen dem "Screenhack". Der ist allerdings notwendig, weil Classic Amigas sonst zu langsam sind, wegen dem bescheidenen Swapping Verhalten von Picasso96. Deshalb wird die Offscreen Bitmap mit auf den Screen gezwungen, in den - normalerweise - unsichtbaren Bereich des Screens.




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

 
Der_Wanderer   Nutzer

11.11.2011, 09:50 Uhr

[ - Direktlink - ]
Thema: BlackShoot läuft nicht mehr auf OS4.1
Brett: Amiga, AmigaOS 4

Ich spekuliere mal dass beim Start immer BestScreenModeID ausgeführt wird und nichts gespeichert.
Wenn es halt einn illegalen Screenmode bekommt wegen einem OS4 Bug dann kann BlackShoot nix dafür.

Das Spiel sollte mit jedem Screenmodus zurecht kommen, auch wenn er von der Spielauflösung abweicht. Selbst wenn der Screen nicht geöffnet werden kann, sollte das Spiel mit entsprechender Meldung beenden und nicht crashen.

Sieht dann aber Möglicherweise seltsam aus (man sieht den "Offscreen Buffer) oder es ist was abgeschnitten (falls Screen zu klein).

Wenn Blackshoot 640x480 haben will, dann läuft es allerdings nur "rund" wenn es den Screenmodus auch gibt.

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



[ Dieser Beitrag wurde von Der_Wanderer am 11.11.2011 um 09:52 Uhr geändert. ]
 
Der_Wanderer   Nutzer

09.11.2011, 21:25 Uhr

[ - Direktlink - ]
Thema: Diverse WinUAE Probleme eines Powerusers
Brett: AROS und Amiga-Emulatoren

Ich bin noch am Testen, aber mit WinUAE 2.2.2 scheinen einige der Probleme nicht aufzutreten, z.B. der hüpfende Mauspfeil.


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

 
 
1 2 -3- 4 5 6 7 8 >> Letzte Ergebnisse der Suche: 1229 Treffer (30 pro Seite)

Suchbegriffe
Schlüsselwörter      Benutzername
Suchoptionen
Nur in diesen Foren suchen
   nur ganze Wörter
Nur Titel anzeigen
alle Treffer anzeigen

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