Win: Text über den Bildschirm schreiben

Anfängerfragen zum Programmieren mit PureBasic.
bastibasti
Beiträge: 13
Registriert: 20.02.2011 16:51

Win: Text über den Bildschirm schreiben

Beitrag von bastibasti »

Hi,

unter Linux mache ich das mit xcat, allerdings gibt es unter Windows keine solche Library. Gibts ne einfache Möglichkeit einen Text über den Screen zu schreiben? (also über alle Anwendungen etc). Ein Fenster soll nach Möglichkeit nicht angezeigt werden.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Win: Text über den Bildschirm schreiben

Beitrag von Bisonte »

Mit einem StickyWindow das transparent und borderless ist (Somit "sieht" man kein Fenster), sollte es kein Problem sein...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
bastibasti
Beiträge: 13
Registriert: 20.02.2011 16:51

Re: Win: Text über den Bildschirm schreiben

Beitrag von bastibasti »

Okay, benötige ich dafür die WIN API?
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Win: Text über den Bildschirm schreiben

Beitrag von Andesdaf »

nö.

Code: Alles auswählen

EnableExplicit
 
Enumeration 
  #WIN
EndEnumeration
  
Enumeration 
  #TXT
EndEnumeration
  
If OpenWindow(#WIN, 0, 0, 100, 50, "hoppla", #PB_Window_ScreenCentered | #PB_Window_BorderLess)

 TextGadget(#TXT, 0,0, 100, 50,"Text")

 Repeat
   Define iEvent.i = WaitWindowEvent()
     
 Until iEvent = #PB_Event_CloseWindow
EndIf
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Win: Text über den Bildschirm schreiben

Beitrag von Bisonte »

Wie man allerdings ein Fenster unter Linux transparent bekommt, kann ich Dir nicht sagen...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
bastibasti
Beiträge: 13
Registriert: 20.02.2011 16:51

Re: Win: Text über den Bildschirm schreiben

Beitrag von bastibasti »

Das Fenster ist unter Windows nicht transparent, sondern grau. hab versucht mit

TextGadget(#TXT, 0,0, 100, 50,"Text")
SetGadgetColor(#TXT, #PB_Gadget_BackColor, $000000)
SetGadgetColor(#TXT, #PB_Gadget_FrontColor, $FFFFFF)

aber dann ist der hintergrund schwarz, ich dachte immer 000000 ist bei Windows transparent?
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Win: Text über den Bildschirm schreiben

Beitrag von Mok »

Da du das ganze nur für Windows brauchst, kannst du einfach auf die API zurückgreifen (ich hoffe, das ist nicht weiter schlimm).

Code: Alles auswählen

hdc = GetDC_(GetDesktopWindow_())
text$ = "Hallo Welt!"

SetTextColor_(hdc,#Green)
SetBkColor_(hdc,#Red)

TextOut_(hdc,50,50,text$,Len(text$))

Repeat:Until GetAsyncKeyState_(27)

ReleaseDC_(GetDesktopWindow_(),hdc)
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
bastibasti
Beiträge: 13
Registriert: 20.02.2011 16:51

Re: Win: Text über den Bildschirm schreiben

Beitrag von bastibasti »

Dann wirds wohl zeit dass ich mir die Vollversion kaufe.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Win: Text über den Bildschirm schreiben

Beitrag von Bisonte »

Also direkt auf den Desktop zeichnen ist wohl nicht das optimalste...

Das Fenster (den Hintergrund des Fensters) transparent zu kriegen hab ich mit RSBasics WinAPI-Snippets
folgendes zusammengeschustert.

Code: Alles auswählen

Procedure.i WindowTransparent(Window.i,Farbe.i)
 
  If IsWindow(Window)
    SetWindowColor(Window,Farbe)
    SetWindowLongPtr_(WindowID(Window),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(Window),#GWL_EXSTYLE) | #WS_EX_LAYERED)
    SetLayeredWindowAttributes_(WindowID(Window), Farbe, 0, 1)
  EndIf
 
EndProcedure
Nur die Farbe bestimmen, z.B. RGB(255,0,255) und der Hintergrund wird auf die Farbe gesetzt.
Die Farbe selbst wird dann transparent dargestellt. Wobei man aufpassen musst, das egal was jetzt diese
Farbe im Fenster hat (Schrift, Images, Icons usw) auch transparent ist ;)

Edit:

Ohne Vollversion, keine API ... (hab ich wohl überlesen :o )
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Win: Text über den Bildschirm schreiben

Beitrag von Mok »

bastibasti hat geschrieben:Dann wirds wohl zeit dass ich mir die Vollversion kaufe.
Tipp: Lade die user32.dll in dein Programm, dort sind die API-Funktionen drinne.
Zuletzt geändert von Mok am 23.02.2011 23:30, insgesamt 1-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Antworten