Seite 1 von 1

(Erledigt)Fenster mit durchsichtigen Stellen.

Verfasst: 23.12.2017 15:51
von tft
Hallo,
hier wider ein frage, bei deren Formulierung ich wider mal an meine Grenzen stosse.

Für meine BlackDesertOnline KI, möchte ich auf dem BDO Fenster eine Sprechblase erscheinen lassen oder Icons und Buttons.
Ein Weg währe, den Hintergrund zu grabben und einfach auf ein Canvas zu Kopieren und dann mit den PB Mitteln die Transparenz
vorzutäuschen. Leider fällt der Trick auf wenn das BDO Fenster verschoben wird. Es ist zwar möglich die Fenster neu zu positionieren.
Das verursacht aber ein sehr blödes flickern und flackern.
Eine meiner Grundsätze beim entwickeln dieser KI ist, das ich keine eingriff in den Client oder den Datentransfer nehmen werde. Auch
das Manipulieren der Fenster selber kommt nicht in frage.

Daher suche ich eine Möglichkeit mit Windows API Mitteln eine Transparenz zu erzeugen. Wobei mir ein nicht zeichnen aller Pixel die RGB 0
eigentlich reicht. Es gibt einige Games die beim Start ein logo oder einen Lancher anzeigen dessen verschnörkelte Kontur den Hintergrund
anzeigt.

Bild

Das Bild oben zeigt mein Icon vom AnimePlayer. Der Hintergrund scheint durch. So möchte ich es bei meinem Fenster haben.

Also .. alle Ideen sind willkommen.

MfG Temucin alias TFT

Re: Fenster mit durchsichtigen Stellen.

Verfasst: 23.12.2017 18:59
von ccode_new
Hallo tft,

ich kenne mich mit Windows-Skins nicht so aus, aber vielleicht hilft das hier:

http://www.purebasic.fr/english/viewtop ... 12&t=45811

Vielleicht findest du auch hier noch etwas brauchbares: http://www.rsbasic.de/winapi-library/ (OpenWindow)

Unter Java könntest du mit:

java.awt.geom.Ellipse2D;
java.awt.geom.GeneralPath;
...

experimentieren.

Bsp:

Code: Alles auswählen

package javaapplication1;

/**
 *
 * @author ccode_new
 */
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;

public class JavaApplication1 extends JFrame {
    public JavaApplication1() {
        super();

        setUndecorated(true);

        setSize(new Dimension(300, 300));
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        Ellipse2D.Double theCircle = new Ellipse2D.Double(0, 0, 300, 300);
        
        Polygon polygon = new Polygon();
        polygon.addPoint(0, 0);
        polygon.addPoint(150, 150);
        polygon.addPoint(0, 300);

        GeneralPath path = new GeneralPath();
        
        path.append(theCircle, true);
        path.append(polygon, true);

        setShape(path);
        
        getContentPane().setBackground(Color.yellow);

        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

                if (ge.getDefaultScreenDevice().isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT)) {
                    new JavaApplication1();
                }
            }
        });
    }
}

Aber wir sind hier ja bei PureBasic.

Mmmh...
Sicherlich haben hier noch andere Leute bessere Windows-Freiform-Design-Tipps.

Oder aber du meinst etwas ganz anderes und ich liege hier komplett falsch ?

Re: Fenster mit durchsichtigen Stellen.

Verfasst: 24.12.2017 12:55
von Andesdaf
hilft das?

Code: Alles auswählen

OpenWindow(0, 0, 0, 110, 110, "Test", #PB_Window_BorderLess | #PB_Window_ScreenCentered)

StartDrawing(WindowOutput(0))
Box(0, 0, 110, 110, RGB(0, 255, 0))
Circle(50, 50, 25, RGB(255, 0, 0))
StopDrawing()

SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0), RGB(0, 255, 0), 0, #LWA_COLORKEY)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Fenster mit durchsichtigen Stellen.

Verfasst: 24.12.2017 18:22
von tft
Hallo .... das ist exakt das was ich gesucht habe .... danke und schöne Fresttage

Gruss Temucin alias TFT

Re: (Erledigt)Fenster mit durchsichtigen Stellen.

Verfasst: 24.12.2017 23:05
von juergenkulow

Code: Alles auswählen

; Jede ms einen Circle 
Bildschirm=ExamineDesktops()-1
Fenster=OpenWindow(#PB_Any, DesktopX(Bildschirm), DesktopY(Bildschirm), DesktopWidth(Bildschirm),
                   DesktopHeight(Bildschirm), "", #PB_Window_BorderLess )
StartDrawing(WindowOutput(Fenster))
Box(0,0,DesktopWidth(Bildschirm), DesktopHeight(Bildschirm), RGBA(0, 0 , 0,255))
SetWindowLong_(WindowID(Fenster), #GWL_EXSTYLE, GetWindowLong_(WindowID(Fenster),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(Fenster), RGBA(0, 0, 0,255), 0, #LWA_COLORKEY)
Repeat 
  Circle(Random(DesktopWidth(Bildschirm)), Random(DesktopHeight(Bildschirm)-500)+400,Random(40)+10,
        RGB(Random($f)*$10+1,0,0)) 
Until WaitWindowEvent(1) = #PB_Event_CloseWindow
StopDrawing()

Re: (Erledigt)Fenster mit durchsichtigen Stellen.

Verfasst: 25.12.2017 12:40
von tft
Hallo,

der ist geil ...... hab ich mich erschrocken. Ich habe einen BackFlash bekommen. Vor 25 Jahren hat ein Virus auf dem AMIGA sowas gemacht.

NICE ....

Gruss TFT