Clickable Area im Hintergrundbild des Hauptfensters ?
- alen
- Beiträge: 107
- Registriert: 09.04.2007 17:38
- Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms - Wohnort: Duisburg
- Kontaktdaten:
Clickable Area im Hintergrundbild des Hauptfensters ?
Hallo Zusammen,
ich habe in einem Win32 Programm per API Call dem Hauptfenster ein Hintergrundbild spendiert.
Nun würde ich gerne einen Teil des Bildes auch für den Anwender klickbar machen wollen.
Wenn der User auf diesen Bereich klickt möchte ich darauf reagieren.
Welches Gadget kann man dafür verwenden ? Oder funktioniert sowas nur über Umwege auch nur per API ?
Für Anregungen wäre ich sehr dankbar.
Besten Dank im Voraus.
Grüße
alen
ich habe in einem Win32 Programm per API Call dem Hauptfenster ein Hintergrundbild spendiert.
Nun würde ich gerne einen Teil des Bildes auch für den Anwender klickbar machen wollen.
Wenn der User auf diesen Bereich klickt möchte ich darauf reagieren.
Welches Gadget kann man dafür verwenden ? Oder funktioniert sowas nur über Umwege auch nur per API ?
Für Anregungen wäre ich sehr dankbar.
Besten Dank im Voraus.
Grüße
alen
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
du kannst auf ein click-event reagieren, und dann WindowMouseX() und WindowMouseY() ermitteln und mit einer tabelle vergleichen, wo deine klickbaren Bereiche sein sollen.
das wäre jetzt das einfachste was mir dazu in den sinn kommt.
das wäre jetzt das einfachste was mir dazu in den sinn kommt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
Sollte für sowas nicht eigentlich seit PB 4.40 B1 auch jedes PB-(Image)Gadget mit einem komplett transparenten Image gehen (also z.B. ImageGadget oder rahmenloses ButtonImageGadget)?alen hat geschrieben:... Nun würde ich gerne einen Teil des Bildes auch für den Anwender klickbar machen wollen.
... Welches Gadget kann man dafür verwenden ?
Auszug aus PB 4.40 B1-Infos:
Hab's mal probiert hin zu bekommen - jedoch leider ohne Erfolg.freak hat geschrieben:- Added: Full alphachannel support for all GUI elements that display images

[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
hm... funzt doch einwandfrei?
kein Image geht auch.
der bemalte Fensterhintergrund dient nur dazu um zu zeigen, dass das ImageGadget wirklich nicht sichbar ist,
der rahmen ist aufgemalt und zeigt nur an, wo das leere ImageGadget ist.
das geht natürlich nur, wenn jeder clickbare Bereich rechteckig sein soll und man für jeden ein extra ImageGadget einrichtet,
und sich diese Imagegadgets nicht mit anderen Gadgets überschneiden.
Deaktivieren - wie man das für Hintergrundbilder macht - kann man sie natürlich nicht, weil sie den Click empfangen müssen.
einen Fensterclick generell abzufragen und anhand einer Zuordnungstabelle (die auch ein unsichtbares Image sein kann) zu interpretieren, ist flexibler.
kein Image geht auch.
Code: Alles auswählen
OpenWindow(0, #PB_Ignore,0, 800,512, "clicktest" )
ImageGadget(0, 24,24, 64,64, 0 )
StartDrawing( WindowOutput(0) )
For n=0 To 255
LineXY( 0, n, 799, n, RGB( 0, 0, n ) )
LineXY( 0, 256+n, 799, 256+n, RGB( n, n, 255 ) )
Next
DrawingMode( #PB_2DDrawing_Outlined )
Box( 24, 24, 64, 64, $0FF0FF )
StopDrawing()
Repeat
Event = WaitWindowEvent()
EvGad = EventGadget()
EvTyp = EventType()
Select Event
Case #PB_Event_Gadget
Select EvGad
Case 0
Select EvTyp
Case #PB_EventType_LeftClick
Debug "left on image"
EndSelect
EndSelect
Case #PB_Event_CloseWindow
EXIT = 1
EndSelect
Until EXIT
der rahmen ist aufgemalt und zeigt nur an, wo das leere ImageGadget ist.
das geht natürlich nur, wenn jeder clickbare Bereich rechteckig sein soll und man für jeden ein extra ImageGadget einrichtet,
und sich diese Imagegadgets nicht mit anderen Gadgets überschneiden.
Deaktivieren - wie man das für Hintergrundbilder macht - kann man sie natürlich nicht, weil sie den Click empfangen müssen.
einen Fensterclick generell abzufragen und anhand einer Zuordnungstabelle (die auch ein unsichtbares Image sein kann) zu interpretieren, ist flexibler.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
@Kaeru:
Falls Du Deine AlphaBlend-Versuche zum ImageGadget also auf diesem Wege gemacht hast kannst Du nicht davon ausgehen dass das erstellte ImageGadget auch tatsächlich transparent war - denn Du hast es ja in jedem Falle übermalt.
Meine Versuche mit einem selbst erstellten Image ein unsichtbares (oder durchsichtiges) ImageGadget zu erzeugen schlugen zumindest allesamt fehl - vielleicht aber auch deswegen weil mein selbst erstellte Image nicht durchsichtig war.
Ich meine mich dran erinnern zu können dass der AlphaChannel eines mit PB erstellten Images nach CreateImage() komplett auf undurchsichtig steht und es Probleme gab diesen zu ändern (da gab es glaube ich mal im englischen Forum einen Thread zu).
Somit könnte es also doch sein dass das AlphaBlending mit ImageGadgets() funnzt - mir nur die Erstellung eines undurchsichtigen Images nicht gelungen ist.
Aber der "Trick" mit ImageID=0 ein "durchsichtiges" ImageGadget zu erstellen ist nicht übel.
Ich wäre nie auf die Idee gekommen das zu versuchen, da ich erwartet hätte in einem solchen Fall eine Fehlermeldung zu bekommen.
[Nachtrag:]
Ahh ... hab's gefunden:
Kleines Bspl. für transparentes ImageGadget (für den, den interessiert):
Du weisst aber schon, dass Du durch das Zeichnen auf WindowsOutput() NACH dem Erstellen eines Gadgets JEGLICHES ImageGadget überschreibst - egal ob es zuvor sichtbar war oder nicht?Kaeru Gaman hat geschrieben:... der bemalte Fensterhintergrund dient nur dazu um zu zeigen, dass das ImageGadget wirklich nicht sichbar ist, ...
Falls Du Deine AlphaBlend-Versuche zum ImageGadget also auf diesem Wege gemacht hast kannst Du nicht davon ausgehen dass das erstellte ImageGadget auch tatsächlich transparent war - denn Du hast es ja in jedem Falle übermalt.
Meine Versuche mit einem selbst erstellten Image ein unsichtbares (oder durchsichtiges) ImageGadget zu erzeugen schlugen zumindest allesamt fehl - vielleicht aber auch deswegen weil mein selbst erstellte Image nicht durchsichtig war.
Ich meine mich dran erinnern zu können dass der AlphaChannel eines mit PB erstellten Images nach CreateImage() komplett auf undurchsichtig steht und es Probleme gab diesen zu ändern (da gab es glaube ich mal im englischen Forum einen Thread zu).
Somit könnte es also doch sein dass das AlphaBlending mit ImageGadgets() funnzt - mir nur die Erstellung eines undurchsichtigen Images nicht gelungen ist.
Aber der "Trick" mit ImageID=0 ein "durchsichtiges" ImageGadget zu erstellen ist nicht übel.

Ich wäre nie auf die Idee gekommen das zu versuchen, da ich erwartet hätte in einem solchen Fall eine Fehlermeldung zu bekommen.
[Nachtrag:]
Ahh ... hab's gefunden:
Code: Alles auswählen
; Leeren des Alpha-Channels
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, ImageWidth(0), ImageHeight(0), $00000000)
Code: Alles auswählen
If CreateImage(0,100,50,32)
If StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 100, 50, $00000000)
DrawingMode(#PB_2DDrawing_AlphaBlend)
LineXY(0,0,100,50,$ffff0000)
LineXY(0,50,100,0,$ff0000ff)
StopDrawing()
EndIf
EndIf
If CreateImage(1,320,200,#PB_Image_DisplayFormat)
If StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(0,0,320,200)
GradientColor(0.0,RGB(243, 16, 0))
GradientColor(0.25,RGB(19, 16, 236))
GradientColor(0.50,RGB(123, 169, 56))
GradientColor(0.75,RGB(252, 250, 52))
GradientColor(1.0,RGB(243, 16, 0))
Box(0,0,320,200)
StopDrawing()
EndIf
EndIf
If OpenWindow(0, 0, 0, 320, 200, "Transparent ImageGadget", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_Invisible)
hbrBackground = CreatePatternBrush_(ImageID(1))
SetClassLong_(WindowID(0),#GCL_HBRBACKGROUND,hbrBackground)
ImageGadget(0, 20, 20, 0, 0, ImageID(0),#PB_Image_Border )
ImageGadget(1, 180, 100, 0, 0, ImageID(0))
HideWindow(0,0)
Repeat
Event = WaitWindowEvent()
EvTyp = EventType()
If EvTyp = #PB_EventType_LeftClick Or EvTyp = #PB_EventType_RightClick
Debug "Click on image"
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
wie wäre es mit einem einfachen Label?
Gruß, Michael
There are 10 types of people, those that understand binary and those that don't!
There are 10 types of people, those that understand binary and those that don't!
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
wie wäre es, wenn du PureBasic-Begriffe benutzt?six1 hat geschrieben:wie wäre es mit einem einfachen Label?
ein "Label" ist eine Sprungmarke im Code, das ist in diesem Fall Offtopic.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Clickable Area im Hintergrundbild des Hauptfensters ?

entschuldige bitte. Ich werde mich zukünftig bemühen.
Ich programmiere schon so lange in Delphi, dass die Komponenten eben "Components" heißen.
Ich meinte ein Text-Gadget. Ich denke, dass es hier eine vergleichbare Funktion wie anderswo gibt, welche dieses Gadget durchsichtig schaltet.
btw:
Warum heißen die Components eigentlich Gadget? "Gadget" heißt sowas wie "...super toll mit bisher unbekannter Funktionalität..."
Wenn ich mal so vergleiche, welche Funktionalität "andere" Programmiersprachen mit graphischer Entwicklungsumgebung in den Object Inspektoren bieten...
Gut, nicht jeder in PB erstellt GUI Anwendungen... aber hier ist eine RAD Entwicklung praktisch, wegen fehlender Unterstützung des DevTool, nicht oder sehr schwerlich möglich.
Gruß, Michael
There are 10 types of people, those that understand binary and those that don't!
There are 10 types of people, those that understand binary and those that don't!
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
Dies dürfte wohl noch aus der Entstehungsgeschichte von PureBasic auf dem guten alten Amiga her rühren:six1 hat geschrieben:Warum heißen die Components eigentlich Gadget?
LINKWikipadia hat geschrieben:Die Eingabefelder, Schaltflächen und Klickboxen in Intuition-Fenstern werden beim Amiga Gadgets (eingedeutscht „Symbole“) genannt.
(Funny ... scheinbar mag die Forensoftware keine URLs mit Umlauten.

[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Clickable Area im Hintergrundbild des Hauptfensters ?
nein, sie mag das ä nicht, und auf jeden Fall keine Klammern.
das ist jetzt aber bestimmt das hundertste Mal...
escape die sonderzeichen...
http://de.wikipedia.org/wiki/Gadget_%28 ... %e4rung%29
das ist jetzt aber bestimmt das hundertste Mal...
escape die sonderzeichen...
http://de.wikipedia.org/wiki/Gadget_%28 ... %e4rung%29
bieten diese anderen Programmiersprachen sieben Compilerversionen in einem Paket?six1 hat geschrieben:Wenn ich mal so vergleiche, welche Funktionalität "andere" Programmiersprachen mit graphischer Entwicklungsumgebung in den Object Inspektoren bieten...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.