ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Autoscroll-Screens und mehr | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
22.07.2007, 10:15 Uhr uho Posts: 114 Nutzer |
Habe letztens mal einen Abend versucht, einen Autoscroll-Screen (ähnlich wie es auch auf der WB möglich ist) zu proggen. Kam leider - auch mangels Literatur, da auswärts - nicht recht zum Zuge. Der Screen soll - Autoscroll haben - kein Overscan - kein Fenster - evtl. Gadgets direkt im Screen - automatisch aktiviert sein Anschauungsbeispiel: ältere Versionen von ABackup Der Screen soll Autoscroll haben, jedoch keinen Overscan, da dieser ja von den Prefs des jeweiligen Users abhängig ist, die Darstellung jedoch immer gleich sein soll. Kein Fenster, da ich mal gelesen habe, daß die Darstellung mit häufigen Systemaufrufen (z.B. Pixel setzen) schneller sein soll, da man sich das ständige Hangeln durch die Windows-Struktur spart (stimmt das ?) und man auch selber durch direktes verändern der Bytes in den Screen schreiben können soll. Außerdem stören für diesen Fall Windows-Elemente nur. Ich benutze OpenScreenTags() mit SA_Type, CUSTOMSCREEN, SA_DisplayID, HIRES_KEY, (also 640x256) SA_WIDTH, 1280 und SA_AUTOSCROLL, TRUE. Funzt aber nicht: Sobald der Mauszeiger an den rechten Rand kommt, verschwindet er, um später am linken Rand wieder aufzutauchen. Dann sind jedoch der aktive (Klick)punkt und die Darstellung des Mauszeigers nicht mehr identisch; man kann nichts mehr gezielt anklicken (Abstand wahrscheinlich 640). Der Screen scrollt gar nicht. Nehme ich noch SA_Overscan, TRUE (oder muß hier ein Wert hin ?) dazu, scrollt der Screen - aber erst nach öffnen eines Fensters (WA_Flags, ACTIVATE) oder Anklicken und natürlich mit Overscan :-(. IMHO gibt es kein Screen-Flag fürs Aktivieren. Bei ABAckup geht das aber. (Test: LAmiga+LMB drücken und Screen runterziehen, loslassen, bei Bewegen der Maus an den unteren Bildschirmrand scrollt der aktive (!) Screen hoch. Geht bei ABackup, in meinem Beispiel aber erst nach Öffnen eines Fensters oder vorherigem Anklicken mit LMB) Vielleicht kann mir ja diesmal jemand helfen. Da ich noch nicht viele Versuche unternommen habe, sollten die Chancen besser als sonst sein ;-) Gruß uho [ - Antworten - Zitieren - Direktlink - ] |
22.07.2007, 11:53 Uhr thomas Posts: 7717 Nutzer |
@uho:Zitat: Da gibt's alles, was du brauchst: http://www.haage-partner.de/download/AmigaOS/NDK39.lha Zitat: SA_Overscan,OSCAN_TEXT wäre richtig. Zitat: Ohne Fenster geht eh nichts. ABackup öffnet vermutlich ein Backdrop-Fenster. Zitat: WA_Flags,WFLG_ACTIVATE oder WA_Activate,TRUE Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
23.07.2007, 14:39 Uhr Holger Posts: 8116 Nutzer |
Zitat:Nein, das stimmt nicht. Es gibt keine Zeichenbefehle, die mit einer Windows-Struktur zu tun haben. Zeichenbefehle werden auf einem RastPort angewendet, und abhängig davon, ob dieser einen Verweis auf einen Layer besitzt, findet ein Clipping statt oder eben nicht. Der Overhead des Clippings ist aber minimal, da dabei keineswegs alle Fenster durchsucht werden (was auch wiederum keine Rolle spielen würde, wenn man nur eines hat). Im Falle des Setzens eines einzelnen Pixels ist das Setzen selbst der Performance Fehler. In nahezu allen praxisrelevanten Fällen ist es effizienter in eine private BitMap, bzw ein byte-array zu schreiben und dieses mit einem Systemaufruf zu übertragen. Wenn's unbedingt sein muss, benutzt man dazu eine private Kopie des RastPorts mit gelöschtem Layer-Pointer. Dann muss aber absolut gewährleistet sein, dass man innerhalb der korrekten Grenzen zeichnet. Übrigens besitzen ab AOS2.0 auch Screens Layer. Somit ist der angebliche Overhead von Fenstern auch dann präsent, wenn gar keine Fenster geöffnet wurden. Zitat:das wiederum widerspricht komplett der vorhergehenden Betrachtung. Was interessiert die Performance des Systemaufrufs, wenn Du ihn gar nicht benutzt? Außerdem ist es definitiv ineffizient, mit der CPU im Bildschirmspeicher herumzumalen. Zitat:Man kann keine Screens aktivieren. Man kann nur Fenster aktivieren. Alles andere hat thomas schon gesagt. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
23.07.2007, 20:05 Uhr uho Posts: 114 Nutzer |
@Thomas,Holger: Erstmal danke für die Antworten. Allerdings muß ich nochmal nachhaken: > "Ohne Fenster geht eh nichts. ABackup öffnet vermutlich ein > Backdrop-Fenster." Man kann also keine Gadgets direkt an den Screen anhängen ? In der NewScreen-Struktur ist doch Platz für einen Gadget-Zeiger ? Und zu dem Problem "Autoscroll ohne Overscan" habt Ihr Euch leider gar nicht geäußert. Bedingt das Eine das Andere oder mache ich nur bei den Flags was falsch ? OSCAN_TEXT ist wohl der kleinste, aber doch eben ein Overscan. Auch habe ich keine Info gefunden, wieviele Pixel das denn sind. Gruß uho [ - Antworten - Zitieren - Direktlink - ] |
23.07.2007, 21:42 Uhr ZeroG Posts: 1487 Nutzer |
@uho: Die Anzahl der Pixel solltest du z.B. im Overscan-Einsteller im Prefs-Verzeichnis finden. Außerdem ist es bestimmt nicht verkehrt zusätzlich zu den Autodocs auch mal in die Includes zu gucken: Zitat: [ - Antworten - Zitieren - Direktlink - ] |
24.07.2007, 20:22 Uhr uho Posts: 114 Nutzer |
Zitat: Das OSCAN_TEXT 1:1 die Einstellung im Prefs-Fenster meint, darauf bin ich kurz nach Absenden meines Beitrags auch gekommen - naja Den o.g. Abschnitt in den Includes hatte ich schon vorher entdeckt. Jedoch erfährt man da eben gerade _keine_ konkrete Pixelzahl (da User-Einstellung). Es ging aber gerade darum, sich von den Overscan-Einstellungen unabhängig zu machen. Also bitte die Fragestellung genauer lesen ! uho [ - Antworten - Zitieren - Direktlink - ] |
24.07.2007, 23:36 Uhr NoImag Posts: 1050 Nutzer |
@uho: OSCAN_TEXT ist die Voreinstellung von SA_OVERSCAN. Hast Du denn die obigen Tipps mal umgesetzt? Es gibt keinen Grund, kein Fenster auf dem Screen zu öffnen. Verwende ein simplerefresh, backdrop und borderless Fenster. Tschüß [ - Antworten - Zitieren - Direktlink - ] |
03.08.2007, 10:45 Uhr uho Posts: 114 Nutzer |
(sorry, hatte nicht gleich Zeit) Hallo, mittlerweile habe ich einige Tests gemacht und Folgendes herausbekommen: a) Autoscroll OHNE Overscan scheint wirklich nicht zu funzen. Allerdings habe ich dazu keine "offiziellen" Infos. b) Verwendet man Overscan, ist man auf Teufel komm' raus von den User-Prefs abhängig: Niemand hindert einen daran, die OSCAN_TEXT-Einstellung in den unsichtbaren Bereich zu verschieben bzw. auf die Maximalwerte einzustellen. Man kann zwar die Fenstergröße automatisch anpassen, z.B. WA_Top, Screen->BarHeight+Screen->BarVBorder, WA_Height,Screen->Height-Screen->... ...BarHeight-Screen->BarVBorder, Im allgemeinen hat man bei Pixelgrafik aber feste Abmessungen (siehe Wator). Außerdem lassen sich die dahinterstehenden Algorithmen oft nur aufwendig und/oder unter Leistungsverlust variabel gestalten. Der Aufwand steht dabei in keinem Verhältnis zum Nutzen ! c) Wie von Euch vermutet, verwendet ABAckup tatsächlich ein BORDERLESS-Fenster. Dies habe ich mittels RSys feststellen können, da dort neben den Screens auch die Fenster angezeigt werden. Als Flags wurde dort 0x00001900 angezeigt. Das läßt sich zerlegen in: 0x00001000 WFLG_ACTIVATE 0x00000100 WFLG_BACKDROP 0x00000800 WFLG_BORDERLESS So ein Fenster habe ich dann auch geöffnet. Allerdings war bei mir die Titelzeile noch zu sehen. Das lag daran, daß ich WA_Title, " |