Textfarbe für Window Button setzen mit API

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Textfarbe für Window Button setzen mit API

Beitrag von dl5ndh »

Code: Alles auswählen

ButtonGadget(#Button_DXI_Starten88, 821, 520, 190, 40, "DXI Alarm starten")
SetGadgetFont(#Button_DXI_Starten88, FontID2)
SetSysColors_(#Button_DXI_Starten88,COLOR_BTNTEXT*lpaElements,RGB(255,0,0)*lpaRgbValues)
GadgetToolTip(#Button_DXI_Starten88, "DXI Alarm starten")
Hallo, ich habe versucht, mit dem Windows API-Befehl SetSysColors_(siehe oben) den Text eines bestimmten Button mit roter Schrift darzustellen. Der API-Befehl ist dort, wo noch die Fenster deklariert sind. Ich benutze für dieses Programmprojekt noch die Version 3.80.
Beim Compilieren wird kein Fehler angemakelt, jedoch bleibt die Schriftfarbe des betreffenden Button schwarz. Weiß jemand, ob ich diesen Befehl trotzdem falsch eingesetzt habe, oder warum geht das nicht, ist er an der falschen Stelle im Programm?

Noch eine zusätzliche Frage betreffs der Textfarbe in ListIconGadgets. Da habe ich es geschafft, die Textfarbe des Textes der Einträge zu ändern

mit SendMessage_(GadgetID(#ListIcon_DXClusterInternet),#LVM_SETTEXTCOLOR,0,RGB(200,0,0))

das hat auch funktioniert. Jedoch sind dann alle Texte der gesamten Liste in der anderen Farbe. Habe nichts gefunden, dass man die Farbe zum Beispiel nur eines Listeneintrages verändern kann, hmmm....
Weiß auch hier jemand Rat ?

Gerhard :cry:
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

dl5ndh hat geschrieben:Ich benutze für dieses Programmprojekt noch die Version 3.80.
dl5ndh hat geschrieben:Habe nichts gefunden, dass man die Farbe zum Beispiel nur eines Listeneintrages verändern kann, hmmm....
Mit einer aktuelleren PB-Version ab 4 geht dies ohne API über den neu hinzugekommenen Befehl SetGadgetItemColor():

Code: Alles auswählen

If OpenWindow(0, 0, 0, 215, 184, "Farbwechsel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CompilerIf #PB_Compiler_Version < 430
    CreateGadgetList(WindowID(0))
  CompilerEndIf

  ListIconGadget(0, 10, 10, 195, 164, "Spalte 1", 95)
  AddGadgetColumn(0, 1, "Spalte 2", 95)

  For i = 1 To 10
    AddGadgetItem(0, i - 1, "Zeile " + Str(i) + ", Spalte 1" + #LF$ + "Zeile " + Str(i) + ", Spalte 2" )

    If i & 1
      SetGadgetItemColor(0, i - 1, #PB_Gadget_FrontColor, #Red)
    EndIf
  Next i
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Für eine PB 3.x-Version ist es komplizierter. Christian hat dazu im englischen Forum eine Lösung mit Callback gezeigt:
http://www.purebasic.fr/english/viewtop ... 6&start=18
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8815
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Die Spezfikationen von 'SetSysColors()' findest du hier.
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Beitrag von dl5ndh »

Shardik hat geschrieben:
dl5ndh hat geschrieben:Ich benutze für dieses Programmprojekt noch die Version 3.80.
dl5ndh hat geschrieben:Habe nichts gefunden, dass man die Farbe zum Beispiel nur eines Listeneintrages verändern kann, hmmm....
Mit einer aktuelleren PB-Version ab 4 geht dies ohne API über den neu hinzugekommenen Befehl SetGadgetItemColor():

Code: Alles auswählen

If OpenWindow(0, 0, 0, 215, 184, "Farbwechsel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CompilerIf #PB_Compiler_Version < 430
    CreateGadgetList(WindowID(0))
  CompilerEndIf

  ListIconGadget(0, 10, 10, 195, 164, "Spalte 1", 95)
  AddGadgetColumn(0, 1, "Spalte 2", 95)

  For i = 1 To 10
    AddGadgetItem(0, i - 1, "Zeile " + Str(i) + ", Spalte 1" + #LF$ + "Zeile " + Str(i) + ", Spalte 2" )

    If i & 1
      SetGadgetItemColor(0, i - 1, #PB_Gadget_FrontColor, #Red)
    EndIf
  Next i
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Für eine PB 3.x-Version ist es komplizierter. Christian hat dazu im englischen Forum eine Lösung mit Callback gezeigt:
http://www.purebasic.fr/english/viewtop ... 6&start=18
Hallo Shardik,
habe gar nicht gerechnet, das jemand hier noch Rat weiß. Ihr seid ja super drauf. Das probiere ich aus. DANKE
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Beitrag von dl5ndh »

NicTheQuick hat geschrieben:Die Spezfikationen von 'SetSysColors()' findest du hier.
Danke auch Dir, NictheQuick. Leseich mir gleich durch.
Gerhard
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Beitrag von dl5ndh »

Hallo ihr beiden,
danke noch mal, da ich aber spezielle dieses eine Programm-Projekt noch unter PB 3.80 weiterentwickle, mußte ichmich für den Windows Callback Weg entscheiden, sicher wäre es inder PB4.20 leichter, aber das nützt mir im Moment nichts, vielleicht bei einem anderen Projekt.
So geht es aber auch, danke vielmals.
Gerhard
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Beitrag von dl5ndh »

Shardik hat geschrieben:
dl5ndh hat geschrieben:Ich benutze für dieses Programmprojekt noch die Version 3.80.
dl5ndh hat geschrieben:Habe nichts gefunden, dass man die Farbe zum Beispiel nur eines Listeneintrages verändern kann, hmmm....
Mit einer aktuelleren PB-Version ab 4 geht dies ohne API über den neu hinzugekommenen Befehl SetGadgetItemColor():

Code: Alles auswählen

If OpenWindow(0, 0, 0, 215, 184, "Farbwechsel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CompilerIf #PB_Compiler_Version < 430
    CreateGadgetList(WindowID(0))
  CompilerEndIf

  ListIconGadget(0, 10, 10, 195, 164, "Spalte 1", 95)
  AddGadgetColumn(0, 1, "Spalte 2", 95)

  For i = 1 To 10
    AddGadgetItem(0, i - 1, "Zeile " + Str(i) + ", Spalte 1" + #LF$ + "Zeile " + Str(i) + ", Spalte 2" )

    If i & 1
      SetGadgetItemColor(0, i - 1, #PB_Gadget_FrontColor, #Red)
    EndIf
  Next i
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Für eine PB 3.x-Version ist es komplizierter. Christian hat dazu im englischen Forum eine Lösung mit Callback gezeigt:
http://www.purebasic.fr/english/viewtop ... 6&start=18

[img]file://C:/PureBasic_3.80/QUELLTEXT/ListIconGagdet_Einzelzeilenfarbig.png[/img]

Mit Deiner Lösung bzgl. dem englischen Link ist das obige Ergebnis entstanden. Unwichtige DX-Meldungen in schwarz und solche, die für den Logbuchinhaber wichtig sind, in ROT ;-)
Hmm, ich wollte Euch einen Screendump mit dem Ergebnis anzeigen, aber das klappt irgendwie nicht....
Danke vielmals
Gerhard
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dl5ndh hat geschrieben:Hmm, ich wollte Euch einen Screendump mit dem Ergebnis anzeigen, aber das klappt irgendwie nicht....
das ist klar, weil wir (zu Deinem Glück) nicht auf Deine Platte gucken dürfen. ;-)

Lade Dein Bild einfach auf abload.de hoch.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Beitrag von dl5ndh »

Kiffi hat geschrieben:
dl5ndh hat geschrieben:Hmm, ich wollte Euch einen Screendump mit dem Ergebnis anzeigen, aber das klappt irgendwie nicht....
das ist klar, weil wir (zu Deinem Glück) nicht auf Deine Platte gucken dürfen. ;-)

Lade Dein Bild einfach auf abload.de hoch.

Grüße ... Kiffi
[img][img]http://www.abload.de/thumb/listicongagdet_einzelze7c6.png[/img] [/img]

Danke, Kiffi, wieder was dazugelernt. Also hier ist das Ergebnis, dass es dank Eurer Hilfe auch mit PB3.80 geht, die einzelnen Zeilen unterschiedlich einzufärben. Es muß nicht sein, aber in diesem Fall ist es aufgrund einer Wichtigkeit doch tragkräftig,hi
Ciao Gerhard
Antworten