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

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

-1- [ - Beitrag schreiben - ]

24.02.2003, 23:49 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Hi Hat jemad Ahnung, wie man normale Intuition Fenster ikonifizieren kann, damit meine ich nun nicht MUI oder ähnliche Dinge, sondern diejenigen die das nicht unterstützen.

Es gibt einige Tools, welches dieses ermöglichen, aber ich möchte das in mein eigenes Programm einbauen.

Natürlich weiss ich das das ohne Hacks nicht geht, aber es soll ja nur Optional sein.

Vieleicht gibt es dazu irgendwo Sources??

gruss

Darius

[ - Antworten - Zitieren - Direktlink - ]

25.02.2003, 00:45 Uhr

indypb
Posts: 42
[Administrator]
Hallo DariusBrewka,

Zitat:
Original von DariusBrewka:
Hi Hat jemad Ahnung, wie man normale Intuition Fenster ikonifizieren kann, damit


Zumindest unter AmigaOS 3.0 geht das nur manuell. Window schließen und
über die Workbench-Library ein AppIcon auf den Screen legen.


tschuess
[|8:)



[ - Antworten - Zitieren - Direktlink - ]

25.02.2003, 01:40 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Das habe ich jetzt nicht gemeint, aber ich habe eine simple Lösung gefunden. Einfach die MinSize einträge auf 1 setzen und das Fenster irgendwo hinschieben und auf 1 Pixel verkleinern. Klappt gut und da sich an dieser Position schon etwas befindet auch vollkommen unsichtbar. Am schluss alles rückgängig machen.
Natürlich muss man noch einiges berücksichtigen, aber ich denke das ist die Simpelste und Kompatibelste Methode

[ - Antworten - Zitieren - Direktlink - ]

25.02.2003, 12:38 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von DariusBrewka:
Das habe ich jetzt nicht gemeint, aber ich habe eine simple Lösung gefunden. Einfach die MinSize einträge auf 1 setzen und das Fenster irgendwo hinschieben und auf 1 Pixel verkleinern. Klappt gut und da sich an dieser Position schon etwas befindet auch vollkommen unsichtbar. Am schluss alles rückgängig machen.
Natürlich muss man noch einiges berücksichtigen, aber ich denke das ist die Simpelste und Kompatibelste Methode


Auf der AmigaOS Developer CD sind Sources zu dem Thema drauf...


[ - Antworten - Zitieren - Direktlink - ]

25.02.2003, 13:52 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von DariusBrewka:
Natürlich muss man noch einiges berücksichtigen, aber ich denke das ist die Simpelste und Kompatibelste Methode


Simpel und kompatibel schon, aber das war's auch schon.


Wenn du's wirklich ordentlich implementieren willst, dann musst do schon den umständlichen Weg über das Freigeben/Schliessen aller Bildschirmressourcen (Fenster, Screens usw.) gehen und ein AppIcon initialisieren. Am besten verwendest du dafür das Diskobject (Icon) der Programm-Exe selbst, somit lässt du dem Anwender die Wahl welches Icon auf seiner Workbench beim ikonifizieren erscheint. Die Methode ist völlig systemkonform und es handelt sich dabei auch nicht um ein Hack.

btw: ohne Icon ist's auch kein ikonifizieren! 8)
--
tokaiBild: http://www.christianrosentreter.com/__test/images/pacman.gif

[ Dieser Beitrag wurde von tokai am 25.02.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

25.02.2003, 18:45 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DariusBrewka:
Das habe ich jetzt nicht gemeint, aber ich habe eine simple Lösung gefunden. Einfach die MinSize einträge auf 1 setzen und das Fenster irgendwo hinschieben und auf 1 Pixel verkleinern. Klappt gut und da sich an dieser Position schon etwas befindet auch vollkommen unsichtbar. Am schluss alles rückgängig machen.
Natürlich muss man noch einiges berücksichtigen, aber ich denke das ist die Simpelste und Kompatibelste Methode

Es ist nicht kompatibel, denn, daß das Fenster bei dieser Größe unsichtbar ist, ist ein zufälliger Seiteneffekt und kann auf einem anderen System schon ganz anders aussehen.
Außerdem freut sich der Anwender bestimmt ganz gewaltig, wenn er zufällig auf dieses unsichtbare Fenster klickt und unerwartete Ergebnisse bekommt.
Und drittens ist der Sinn einer Ikonifizierungsfunktion gerade, daß bestimmte Resourcen freigegeben werden, während das Programm im Hintergrund liegt. Zum Beispiel möchte der Anwender vielleicht die Farb- oder Fonteinstellungen der Workbench ändern und Dein unsichtbares Fenster verhindert genau dies.
Also, ganz so leicht sollte man es sich als Programmierer nicht machen. Wie man vorgehen muß, wurde Dir in diesem Thread ja schon gesagt.

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

[ - Antworten - Zitieren - Direktlink - ]

25.02.2003, 23:43 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Natürlich, den User wird es auch ganz bestimmt freuen wenn er sein Fenster nicht mehr aufbekommt, weil kein Speicher mehr da ist.

Es ist bestimmt nicht der Sinn des "ikonifizierens" Resourcen Freizugeben, sondern das Fenster nicht mehr zu sehen!

Andererseits wird das Fenster in den Hintergrund "Ikonifiziert", d.h. es befindet sich etwas davor und folglich kann nichts angeklickt werden, sodass dieses Argument auch nicht gilt.

[ - Antworten - Zitieren - Direktlink - ]

26.02.2003, 11:52 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DariusBrewka:
Natürlich, den User wird es auch ganz bestimmt freuen wenn er sein Fenster nicht mehr aufbekommt, weil kein Speicher mehr da ist.

Das ist bei allen Programmen so. Das ist ein normales Risiko, das man immer eingehen muß. Ein ikonifiziertes Programm kann problemlos solange ikonifiziert bleiben, bis wieder genug Speicher da ist.
Übrigends kann Dir das in bestimmten Fällen auch beim Vergrößern des Fensters passieren.
Zitat:
Es ist bestimmt nicht der Sinn des "ikonifizierens" Resourcen Freizugeben, sondern das Fenster nicht mehr zu sehen!
Wenn ich wie schon gesagt Einstellungen ändern will und ein Programm in der von Dir geschilderten Art das verhindert, fliegt es bei mir definitv von der Festplatte.
Mag sein, daß andere diese Schummelprogrammierung nicht stört, mag sein...
Zitat:
Andererseits wird das Fenster in den Hintergrund "Ikonifiziert", d.h. es befindet sich etwas davor und folglich kann nichts angeklickt werden, sodass dieses Argument auch nicht gilt.
Natürlich kannst Du es in den Hintergrund legen, und wer garantiert Dir, daß es da auch bleibt? Willst Du dem Anwender verbieten, andere Fenster nach hinten zu legen?
Um Himmels willen, ich befürchte, genau das wirst Du tun. Und noch viel Aufwand betreiben, das sicherzustellen, anstatt einfach die Ikoniofizierung ordentlich zu programmieren.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 09:05 Uhr

platon42
Posts: 400
[Ex-Mitglied]
Zitat:
Original von DariusBrewka:
Natürlich, den User wird es auch ganz bestimmt freuen wenn er sein Fenster nicht mehr aufbekommt, weil kein Speicher mehr da ist.


Das ist Pech, passiert aber wohl seltenst.

Zitat:
Es ist bestimmt nicht der Sinn des "ikonifizierens" Resourcen Freizugeben, sondern das Fenster nicht mehr zu sehen!

Doch, genau das ist u.A. der Sinn.

Zitat:
Andererseits wird das Fenster in den Hintergrund "Ikonifiziert", d.h. es befindet sich etwas davor und folglich kann nichts angeklickt werden, sodass dieses Argument auch nicht gilt.

Ein ein Pixel großes Fenster ist trotzdem noch ein Fenster. Es ist
sichtbar, es blockiert den Screen, es hat Layer, die geupdatet werden
(schlimmer noch mit SmartRefresh) und Deine angestrebte Methode ist nicht
nur nicht schön, sie entspricht auch keinem Style-Guide. Solche Programme
fliegen bei mir sofort wieder von der Platte.

Ich meine, wieso fragst Du überhaupt danach, wie man Iconify implementiert,
wenn Du's dann eh nicht machen willst?

Ich hab jetzt leider keinen C-Source, weil ich seit MUI kein manuelles
Iconify mehr programmiert habe, aber wenn der Assembler-Source so einer
Funktion weniger als eine Seite ist, dann sind das in C ein paar Zeilen.

--
Best Regards

Chris Hodges


[ Dieser Beitrag wurde von platon42 am 28.02.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 11:10 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Ich glaube, hier versteht keiner!.
Mensch ich will kein Fenster Iknoifizieren, welches ich erzeugt habe sondern Fenster anderer Applikationen.

Wie ich eigene Ikonifizieren kann ist mir vollkommen Klar und kein Problem, notfalls kann ich CloseWindow benutzen bei Fremdfenstern geht das wohl oder übel nicht.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 13:15 Uhr

DOM
Posts: 1044
Nutzer
Selbst ist der Sucher!

Wie wäre es mit dem AmiNet und wIconify.LZH ist zwar ein
wenig alt, aber der Source dürfte wohl immer noch funzen!

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 13:16 Uhr

gni
Posts: 1106
Nutzer
Zitat:
DariusBrewka:
Mensch ich will kein Fenster Iknoifizieren, welches ich erzeugt habe sondern Fenster anderer Applikationen.

Das ist nicht unterstützt. Fremde Fenster sind off-limit.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 13:44 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
@gni

Das sagt aber trotzdem nichts darüber aus, dass einige es trotzdem benutzen wollen!.
Anders ausgedrückt wenn du es nicht benutzen willst, so kannst du es bleiben lassen.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 14:07 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DariusBrewka:
Ich glaube, hier versteht keiner!.
Mensch ich will kein Fenster Iknoifizieren, welches ich erzeugt habe sondern Fenster anderer Applikationen.

Du solltest Dich mal mit dem Gedanken befassen, daß andere Programmierer auch einen Grund haben, ihr Fenster mit einer MinSize zu versehen. Es bedeutet einfach gesagt, kleiner ist _nicht erlaubt_. Wenn also das Programm abstürzt, weil z.B. der Layout-Algorithmus das nicht beherrscht, geht das auf Deine Kappe.
Und Du kannst Dir noch nicht einmal ausreichend _vorstellen_, wieviele Fehler dadurch erzeugt werden können.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 14:58 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
@Holger

Natürlich, darum soll das ja auch nicht defaultmässig gehen sondern Optional und darum wird auch angegeben "Benutzung auf eigene Gefahr".

Das man mit Fremden Fenstern nicht spielen soll, braucht mir keiner erzählen, nur wenn mich 50% Aller anschreiben ich solle das einbauen, so kann ich entweder dieses ignorieren (habe ich bisher auch gemacht, da es AOS nicht unterstützt (MUI etc. ausgenommen)), oder wenigstens eine Option angeben die zugegebenermassen nicht Ideal ist, aber immer noch "besser" als an irgendwelchen Strukturen rumzudoktorn, auch wenn die Änderung der MINSIZE Einträge nichts anderes ist.

Ich würde lieber die MUI Ikonifizierung etc. unterstützen, aber woher soll ich wissen dass ein Fenster MUI-Ikonifizierbar etc. ist?

Bisher habe ich keine Patches von Systemfunktionen benutzt und auch das auslesen der Intuitiondaten geschieht mehr oder weniger geschützt, darum brauch man mir nicht zu sagen an Fremden Fenstern fummelt man nicht.

Wenn ich angebe, alles sei Optional und nicht Sicher, so ist das Legal da man es ja abschalten oder das ganze Programm nicht benutzen muss.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 15:47 Uhr

Holger
Posts: 8116
Nutzer
Du könntest versuchen, einen passenden AREXX-Port zu finden (z.B. über Namensvergleiche) und diesem ein "HIDE" oder "ICONIFY" zu schicken.
Hier ist die Wahrscheinlichkeit, daß das Programm ein solches Kommando unterstützt, aber völlig andere Dinge damit verbindet, sehr gering. Und es sollte zumindest nicht abstürzen, wenn es sauber programmiert ist.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 15:50 Uhr

Holger
Posts: 8116
Nutzer
Nachtrag:
Eine andere Möglichkeit, ist die Commodities-Liste. Bei Commodities kann man sogar abfragen, ob sie Show/Hide-Kommandos unterstützen.

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 16:45 Uhr

Dietmar
Posts: 166
Nutzer
> Ich glaube, hier versteht keiner! Mensch ich will kein Fenster Iknoifizieren, welches ich erzeugt habe sondern Fenster anderer Applikationen.

Und Du willst das machen, indem Du in die Fenster-Struktur anderer Programme "1" als minimale Grösse hereinschreibst ?! Idiotische Idee, die zum Absturz führen wird. Beispiel Editor DME: Wenn das Fenster auf einen (1) Pixel geschrumpft wird, ist die Anzahl Zeichen pro Zeile gleich 0, errechnet als innere Fenster-Grösse / Fontbreite. Da an anderer Stelle durch die Anzahl-Zeichnen-pro-Zeile geteilt wird (Scroller-Layout), gibt es einen Division By Zero Guru. Mit anderen Worten: wenn Programme ein Limit für die untere Fenstergröße setzen, haben sich die Progammierer dabei möglicherweise etwas gedacht und sind nicht für einen Pixel vorbereitet ;-)

[ - Antworten - Zitieren - Direktlink - ]

27.02.2003, 23:47 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
@Dietmar

Natürlich SnoopDos hat das gleiche Problem verursacht, also tue ich's bei SnoopDos nicht!. Bei vielen Apps geht das nicht, weil denen dafür die "Vorraussetzungen" fehlen (nicht Resizeable etc.), aber bei vielen Andern hatte ich keine Probleme.

[ - Antworten - Zitieren - Direktlink - ]

28.02.2003, 08:41 Uhr

platon42
Posts: 400
[Ex-Mitglied]
Zitat:
Original von DariusBrewka:
Ich glaube, hier versteht keiner!.
Mensch ich will kein Fenster Iknoifizieren, welches ich erzeugt habe sondern Fenster anderer Applikationen.


Vielleicht, lieber Darius, solltest Du in Zukunft Deine Fragen so formulieren, dass auch richtig verstanden werden und man nicht über mehrere Tage hinweg aneinander vorbeiredet :-P

Und nun muss ich allen anderen auch zustimmen: Fremde Fenster sind definitiv tabu. Finger weg! Wir brauchen keine inkompatiblen Hacks wie es vor 10 Jahren üblich war, diese Zeiten sind endgültig vorbei.

Wenn sich die User Iconify für Standardprogramme wünschen, können Sie doch a) den entsprechenden Programmierer fragen oder b) MorphOS oder AOS4 einsetzen, denn die unterstützen soetwas auf legale Weise (durch off-screen-layers, ohne dass man das Fenster resizen muss).

--
--
Best Regards

Chris Hodges

[ - Antworten - Zitieren - Direktlink - ]

28.02.2003, 20:39 Uhr

Holger
Posts: 8116
Nutzer
Da fällt mir noch ein, daß es noch lustige Effekte geben wird, wenn das Dariusifierte Programm eine echte Ikonifizierungsfunktion hat.
Dann kann das Fenster gleich vier verschiedene Zustände haben:
  • Normal ikonifiziert
  • Dariusifiert (Größe 1, sichtbar)
  • Ikonifiziert und Dariusifiert (nicht sichtbar, Größe 1 gemerkt)
  • Sichtbar (normale Größe)
    Und drei der Zustände sind optisch nicht zu unterscheiden. Und noch lustiger wird, sobald ein Programm sein Fenster dauerhaft fixiert. U.u. öffnet es sein Fenster auch dann dariusifiert, wenn der Hack schon längst deinstalliert wurde.

    mfg

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

    [ - Antworten - Zitieren - Direktlink - ]

  • 01.03.2003, 14:27 Uhr

    Dietmar
    Posts: 166
    Nutzer
    Zitat:
    Original von DariusBrewka:
    Natürlich SnoopDos hat das gleiche Problem verursacht, also tue ich's bei SnoopDos nicht!


    Wenn ich das richtig sehe, arbeitest Du mit einer Negativliste (Liste mit Programmen, die sich nicht ikonifizieren lassen; alles andere wird ikonifiziert). Es wäre besser, mit einer Positivliste zu arbeiten: alles was sich bekanntermassen ikonifzieren lässt, wird ikonifiziert. In der Liste könnte auch vermerkt werden, wie es am besten geht: bestimmten Rexx-Befehl senden oder Deine Zwangsmethode. Wenn der User versucht, ein Programm zu ikonifizieren, das nicht in der Positivliste steht, Warnung anzeigen: "Wenn Sie fortfahren, stürzt möglicherweise der Rechner ab. Bitte beenden Sie alle wichtigen Programme". Und wenn es dann gut geht, das Programm in die Positivliste aufnehmen.

    [ - Antworten - Zitieren - Direktlink - ]

    01.03.2003, 17:08 Uhr

    DariusBrewka
    Posts: 899
    [Benutzer gesperrt]
    @Dietmar

    Du hast vollkommen Recht und das ist der bisher einzig vernünftige Vorschlag.

    gruss

    [ - Antworten - Zitieren - Direktlink - ]

    04.03.2003, 18:17 Uhr

    Saint
    Posts: 68
    Nutzer
    Wie macht das eigentlich PowerWindowsNG? Damit kann ich hier ohne Probleme sämtliche Fenster ikonifizieren, gab noch nie Abstürze. Ich vermute da wird die layers.library gepatcht, aber vielleicht bietet das programm ja einen Anhaltspunkt wie man soetwas machen kann.

    [ - Antworten - Zitieren - Direktlink - ]

    04.03.2003, 21:37 Uhr

    Holger
    Posts: 8116
    Nutzer
    Zitat:
    Original von Saint:
    Wie macht das eigentlich PowerWindowsNG?

    Ich tippe mal auf ein Äquivalent zu aus dem Bildschirm schieben.
    Das hieße, daß das Programm vom System keine Aufforderungen zum Neuzeichnen mehr bekommt, und solange das Programm a) nicht von sich aus neuzeichnet oder b) alle Zeichenoperationen über den RastPort und nicht direkt in die BitMap ausführt (also mit korrektem Clipping) dürfte es dann keine Probleme geben.

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

    [ - Antworten - Zitieren - Direktlink - ]

    05.03.2003, 19:25 Uhr

    Georg
    Posts: 107
    Nutzer
    Zitat:
    Original von Saint:
    Wie macht das eigentlich PowerWindowsNG? Damit kann ich hier ohne Probleme sämtliche Fenster ikonifizieren, gab noch nie Abstürze. Ich vermute da wird die layers.library gepatcht, aber vielleicht bietet das programm ja einen Anhaltspunkt wie man soetwas machen kann.


    Es installiert Patches (layers und andere), die dafür sorgen
    daß Layer, die über die Screen-Grenzen hinausgeschoben werden,
    in offscreen cliprects landen. So wie das auch bei von
    anderen Layern verdeckten Layern geschieht. Dazu wird einfach
    der Raum außerhalb des Screens mit vier nobackfill-layers
    "umrandet" und die Patches sorgen dafür, daß diese Layer immer
    die allervordersten bleiben. Um sicherzugehen, daß "normale"
    Layer, die über die Screengrenzen hinausgeschoben werden
    darunter landen und damit von layers automatisch als
    verdeckt gehandelt werden.

    Dann werden direkt im ROM noch per BlizKick Modul 3 kleine
    Intuition Check-Routinen ausgeschalten, die normalerweise
    dafür sorgen, daß man Fenster gar nicht über den Rand hinaus
    bewegen kann und sie statt dessen am Rand "anstoßen".

    Ikonifizierte Fenster werden einfach komplett außerhalb
    des Screens geMoveWindow()ed.

    BTW: Den Source davon gibts ja auch im Aminet



    [ - Antworten - Zitieren - Direktlink - ]


    -1- [ - Beitrag schreiben - ]


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


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