Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Kylix und KDE-"Systray"

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.05.2003
    Ort
    Gifhorn
    Beiträge
    9

    Kylix und KDE-"Systray"

    Hi,

    ist es mit Kylix möglich ein Icon für die erstellte Anwendung in das "Systray" (heißt es bei KDE so?) von KDE zu bringen (und natürlich auch Events wie Doppel-, Links- und Rechtsklick abfangen)? Oder muss man eine richtige KDE-Anwendung erstellen? Weil das wäre ja glaub ich mit Kylix leider nicht möglich :-/

    Danke für hilfreiche Antworten!

    Ciao
    ~Zeeke

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    das muss schon eine richtige kde-app sein

    afair bietet KDevelop dafür sogar ein grundgerüst

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, geht wahrscheinlich zumindest nicht out-of-the-box, aber warte besser noch auf eine Antwort der Kylix/Delphi Leute.

    Könnte sich aber möglicherweise realisieren lassen, wenn das Programm mit dem Window Manager oder dem Panel kommunizieren könnte.

    Auf www.freedesktop.org gibt es einen Entwurf für eine Spezifikation, die das Desktopunabhängig gestalten soll http://www.freedesktop.org/standards/systemtray.html

    Was mich in dieser Richtung interessieren würde ist, ob man im C++ Mode von Kylix eine Komponente für CLX machen könnte und die dann im Delphi Mode benutzen kann.
    Ist aber wahrscheinlich nicht so einfach.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.05.2003
    Ort
    Gifhorn
    Beiträge
    9
    Hi,

    vielen Dank erstmal, das hat mir schon sehr geholfen. Ich habe den Code von freedesktop.org versucht nach Kylix (Delphi) zu portieren. Bisher schaut das so aus...
    Code:
    procedure send_message(
        dpy: PDisplay;   // Display
        w  : Window;    // Sender (tray icon window)
        _message,       // Message opcode
        data1,          // message data 1
        data2,          // " 2
        data3: Cardinal // " 3
    );
    var
        ev: XEvent;
    begin
        // memset(&ev, 0, sizeof(ev));
        ev.xclient.xtype        := ClientMessage;
        ev.xclient.xwindow      := w;
        ev.xclient.message_type := XInternAtom(dpy, '_NET_SYSTEM_TRAY_OPCODE', 0);
        ev.xclient.format       := 32;
        ev.xclient.data.l[0]    := 0; // x_time;
        ev.xclient.data.l[1]    := _message;
        ev.xclient.data.l[2]    := data1;
        ev.xclient.data.l[3]    := data2;
        ev.xclient.data.l[4]    := data3;
    
        // trap_errors();
        XSendEvent(dpy, w, 0, NoEventMask, @ev);
        XSync(dpy, 0);
    
        {if untrap_errors() then
        begin
            // Handle failure
        end;}
    end;
    In die Uses-Klausel muss die xlib eingetragen werden. Habe ein paar Sachen weggelassen (auskommentiert), weil ich nicht wusste, wie ich sie portieren sollte. Der Code lässt sich soweit so gut auch ohne Fehlermeldungen kompilieren, jedoch weiß ich nicht so ganz, wie ich ihn anwenden soll.. *g*

    Vielleicht kann mir ja jemand weiter helfen oder hat z.B. ein kleines Mini-Beispiel (also kleines funktionsfähiges Programm) dafür in C/C++ parat... das würde mir gewiss auch sehr helfen.

    Danke!
    Ciao
    ~Zeeke

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von Zeeke
    Hi,

    vielen Dank erstmal, das hat mir schon sehr geholfen. Ich habe den Code von freedesktop.org versucht nach Kylix (Delphi) zu portieren. Bisher schaut das so aus...
    Wow, ich bin beeindruckt!


    Vielleicht kann mir ja jemand weiter helfen oder hat z.B. ein kleines Mini-Beispiel (also kleines funktionsfähiges Programm) dafür in C/C++ parat... das würde mir gewiss auch sehr helfen.
    Ich hab mal versucht, nachzuvollziehen, wie das in KDE gemacht wird, bzw. wie das die entsprechenden Klassen in KDE machen.

    Die entsprechende Klasse ist da KWin, die Methode setSystemTrayWindowFor, die zwei Window IDs als Parameter nimmt: die Window ID des Tray windows und die ID des Applikations Hauptfensters.

    Damit wird dann eine Klasse NETWinInfo gefüllt und eine Methode davon aufgerufen (NETWinInfo::setKDESystemTrayWinFor)

    Die beiden .cpp Dateien sind in kdelibs/kdecore und heißen kwin.cpp und netwm.cpp
    http://webcvs.kde.org/cgi-bin/cvsweb...elibs/kdecore/

    Vielleicht kannst du damit was anfangen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    10.07.2001
    Ort
    Rosenheim
    Beiträge
    7
    Hi,
    würde mich auch mal interressieren wie man das in die Systray bekommt.
    Hab damit auch schon mal rummprobiert, bin aber kläglich gescheitert. Also falls das jemand hinbekommen hat würde es mich freuen wenn er hier ein kleines Beispiel posten würde.
    mfg woodghost

  7. #7
    Registrierter Benutzer
    Registriert seit
    10.07.2001
    Ort
    Rosenheim
    Beiträge
    7
    Ich hab zu dem Thema bei kylixforum.de was gefunden.

    Systray
    mfg woodghost

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Thumbs up Super

    erstklassig, danke!

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •