[ERLEDIGT] Frage ImageGadget Button und ButtonGadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von RSBasic »

@dige
Anscheinend siehst du den Unterschied nicht bzw. der Effekt ist bei dir nicht sichtbar?
http://www.dateiupload.net/download.php ... 05a87d598a
Beim zweiten Code ist der Effekt aufgrund der Größe nicht sichtbar.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von dige »

Ach jetzt sehe ich es... die Größe vom ButtonImageGadget() ist anders.
Ich dachte die Codes sind komplett identisch... ;-)

Danke fürs aufklären - ich bin erleichtert :D
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von RSBasic »

Wobei ich dank deiner Frage jetzt ein Fehler von mir entdeckt habe. Der Code "Ohne Klick-Animation" ist eigentlich total sinnfrei, weil der Effekt trotzdem sichtbar ist, wenn man z.B. eine nicht einfarbige Grafik nutzt. Die Grafik wird trotzdem beim Klick-Event ein paar Pixel nach unten/rechts verschoben, nur bei einer einfarbigen Grafik, die ich in beiden Beispielcodes erstellt habe, ist mir das nicht aufgefallen.
Gut, dass du nochmal nachgefragt hast. Mir wär das gar nicht aufgefallen, weil ich nur eine einfarbige Grafik benutzt habe. :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von udg »

@RBASIC

Danke für den Tipp und auch danke für CanvasGadget Info.
Mit Canvas kann ich in meinem Fall nichts anfangen. Es entsteht immer ein kurioser MouseOver Event sobald ich Über ein Canvas mit der Maus fahre.

Letztendlich habe ich eine schicke Lösung mit ButtonImageGadget gefunden.

Bild

Jetzt mache ich die angezeigte Schrift (Infos wie Songname und Zeit) erstmal transparent und dann gehts weiter ans Design und weitere Funktionen.

So long

Grüße an alle und Vielen Dank
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von CSHW89 »

Beim Canvas muss man mit EventType erstmal prüfen, welches Ereignis aufgetreten ist.

Code: Alles auswählen

...
Case #IDDeinesCanvasGadget
  
  Select EventType()
  Case #PB_EventType_LeftClick
    Debug "Click!"
    
  Case #PB_EventType_MouseEnter
    Debug "MouseEnter!"
    
  ...
  EndSelect
...
lg Kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von RSBasic »

@udg
Falls du gerne zusätzlich die Hintergrundfarbe deines TrackBarGadgets bestimmen möchtest, hier ein Code für dich:

Code: Alles auswählen

EnableExplicit

Define EventID
Global TBColor = CreateSolidBrush_(RGB(100, 200, 255))

Procedure WCB(WindowID, Message, wParam, lParam)
  Protected Result
  
  Result = #PB_ProcessPureBasicEvents
  
  Select Message
    Case #WM_CTLCOLORSTATIC
      Select lparam
        Case GadgetID(1)
          SetBkMode_(wParam, #TRANSPARENT)
          Result = TBColor
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TrackBarGadget(1, 50, 50, 400, 50, 0, 50, #PB_TrackBar_Ticks)
  
  SetWindowColor(0, RGB(100, 200, 255))
  SetWindowCallback(@WCB(),0)
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      DeleteObject_(TBColor)
      End
    EndIf
  ForEver
EndIf
Und wenn du außerdem auch noch die Hintergrundfarbe deines TextGadgets bestimmen möchtest, z.B. transparent: http://www.rsbasic.de/aktualisierung/wi ... %20Text.pb
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von udg »

CSHW89 hat geschrieben:Beim Canvas muss man mit EventType erstmal prüfen, welches Ereignis aufgetreten ist. lg Kevin
ich habe meine Events definiert aber leider ohne buttenklick erfolg. hier mal ein auszug:

Code: Alles auswählen

; hier definier ich meinen Button
 play_button_1 = CatchImage(#PB_Any, ?play_button_1_start, ?play_button_1_End - ?play_button_1_start) 
 CanvasGadget(#Button_2, 109, 8, 47, 50) )
 StartDrawing(CanvasOutput(#Button_2));StartDrawing(ImageOutput(play_button_1))
 DrawImage(ImageID(play_button_1),0,0|#PB_2DDrawing_AlphaBlend) ;Bild hinten
 StopDrawing()
 FreeImage(play_button_1)

;-Canvas PlayButton
{
   If Event = #PB_Event_Gadget And EventGadget() 
     Select EventType() 
       Case #PB_EventType_LeftButtonDown
         EventGadget = EventGadget()
         EventType = EventType()
       If EventGadget = #Button_2 ;Play Button
         MP_StopV2M(0) ;Stoppen  MP3D LIB
         MP_FreeV2M()  ;Player freigeben MP3D LIB
         PauseSavedPos = 0 ;Reset last position
         SoundFileName$ = OpenFileRequester("Choose a .v2m file", "", "V2M files|*.v2m",0)
       If Not SoundFileName$ = ""
         MP_LoadV2M(SoundFileName$) ; MP3D LIB
         MP_PlayV2M(0)      ; 0 start from beginning MP3D LIB
         MP_SetVolumeV2M(GetGadgetState(#TrackBar_23)/100) ;MP3D LIB
         IsPlaying=1
       EndIf
      EndIf
     EndSelect
   EndIf    
}
kurioser Weise funktioniert mein Canvas nicht als Button. Sobald ich mit der Maus darüber fahre wird der Event schon ausgelöst. Ich denke das hängt mit dem rest des Codes zusammen.
Inzwischen finde ich aber ButtonImageGadget gut :)
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von udg »

RSBasic hat geschrieben:@udg
Falls du gerne zusätzlich die Hintergrundfarbe deines TrackBarGadgets bestimmen möchtest, hier ein Code für dich:
Danke, soweit war ich noch gar nicht. Den code werde ich studieren und einpflegen.
RSBasic hat geschrieben: Und wenn du außerdem auch noch die Hintergrundfarbe deines TextGadgets bestimmen möchtest, z.B. transparent: http://www.rsbasic.de/aktualisierung/wi ... %20Text.pb
Im moment arbeite ich an der Texttransparenz. Bei der Titelanzeige klappt das alles. Nur im Feld wo ich die Playtime anzeigen lasse habe ich noch bugs.
mal schauen das ich das schnell finde.

warscheinlich stimmt da etwas nicht weil der Timer sich pro Sekunde ändert? Ich arbeite daran.

Danke Euch
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von Bisonte »

udg hat geschrieben:kurioser Weise funktioniert mein Canvas nicht als Button. Sobald ich mit der Maus darüber fahre wird der Event schon ausgelöst. Ich denke das hängt mit dem rest des Codes zusammen.
Bei einem CanvasGadget muss man immer darauf achten den Eventtype mit abzufragen und nur auf die gewünschten zu reagieren.
Bei dem Gadget löst so ziemlich alles ein Event aus, selbst die Bewegung der Maus innerhalb des Gadgets (#PB_EventType_MouseMove).

Und vorher, ist natürlich ein PB_Event_Gadget angelaufen, weil das Gadget ja was mitzuteilen hat. Deshalb IMMER die Eventtypes abfragen,
damit unerwünschte Events ins Leere laufen...

Das Canvas zähle ich zu den besten Gadgets von PB, weil man damit so vieles machen kann...

Mit den seit PB 5.x existierenden BindEvent/BindGadgetEvent Funktionen ist das ganze noch schnuckeliger geworden.

Ein ButtonGadget mit einem Canvas "nachzubauen" ist beinahe schon zu einfach ;)
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
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Frage ImageGadget Button und ButtonGadget

Beitrag von udg »

RSBasic hat geschrieben:@udg
Falls du gerne zusätzlich die Hintergrundfarbe deines TrackBarGadgets bestimmen möchtest, hier ein Code für dich:

Code: Alles auswählen

EnableExplicit

Define EventID
Global TBColor = CreateSolidBrush_(RGB(100, 200, 255))

Procedure WCB(WindowID, Message, wParam, lParam)
  Protected Result
  
  Result = #PB_ProcessPureBasicEvents
  
  Select Message
    Case #WM_CTLCOLORSTATIC
      Select lparam
        Case GadgetID(1)
          SetBkMode_(wParam, #TRANSPARENT)
          Result = TBColor
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TrackBarGadget(1, 50, 50, 400, 50, 0, 50, #PB_TrackBar_Ticks)
  
  SetWindowColor(0, RGB(100, 200, 255))
  SetWindowCallback(@WCB(),0)
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      DeleteObject_(TBColor)
      End
    EndIf
  ForEver
EndIf
Und wenn du außerdem auch noch die Hintergrundfarbe deines TextGadgets bestimmen möchtest, z.B. transparent: http://www.rsbasic.de/aktualisierung/wi ... %20Text.pb

Vielen Dank. Leider nutzt mir der Code nichts, denn hiermit wird lediglich der Trackbar mit der selben farbe belegt wie man den Hintergrund farblich definiert. Was ich brauch ist eine Funktion/ Befehl, den Trackbar transparent machen zu können.
Ich kann diesen mit gnozal's PureColor Library transparent machen. Sieht sehr gut aus. nur sobald ich den Slider bewege oder der Song losspielt. zeichnet sich die Farbe wieder rein :(
Need Help .


Bild:
Bild

Bild


Den Text habe ich inzwischen freigestellt,sodass er nun ringsherum durchsichtig ist. leider habe ich auch hier ein großes Problem.
Wenn der Song anfängt zu spielen flackert der Text ganze unerträglich. Ich habe dieses Problem nun schon in vielen Beiträgen gelsesen.
Mit welcher Möglichkeit kann man dieses Flackern unterbinden?
Das wäre ein ganz wichtiger Punkt.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten