Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Problem mit Text im Tabcontrol
Autor: Jens Lange (---.dip0.t-ipconnect.de)
Datum:   09.04.19 21:21

Bin von WIN7 auf WIN10 umgestiegen, wollte mal wieder bissel mit XPROFAN X3 arbeiten und muß gestehn, sieht nicht so gut aus. Was unter WIN7 noch gut ging, unter WIN10 ...

Problem:

RADIO2& = CREATE("RADIOBUTTON",%HWND,"7.00%",170,245,70,0030)
Create("Text",%HWND,"SPALTENSUMMEN",370,190,130,35)

haben keinen transparenten Hintergrund mehr, da ist immer ein andersfarbiges Rechteck drum herum.
Auf mehreren WIN10 Rechnern probiert, überall das gleiche...


'QUELLTEXT
Declare RADIO1&, RADIO2&, Tabcontrol&, Tabdialog%
'----------------------------------------------
DEF GetSysColor(1) !"USER32","GetSysColor" 'neu
'----------------------------------------------
WindowStyle 26+512
WINDOWTITLE "Kassen-Verwaltung"
WINDOW 0,0 - 700,700
'--------------------------------------
CLS GETSYSCOLOR (15) 'neu
'--------------------------------------
Tabcontrol& = Create("Tabctrl",%hwnd,"Adresse",80,80,500,500)

'transparenter hintergrund
RADIO1& = Create("RADIOBUTTON",%HWND,"0%",170,45,50,30)
'transparenter hintergrund

'kein transparenter hintergrund
RADIO2& = CREATE("RADIOBUTTON",%HWND,"7.00%",170,245,70,0030)
Create("Text",%HWND,"SPALTENSUMMEN",370,190,130,35)
'kein transparenter hintergrund

WaitKey
DestroyWindow(%hwnd)
End



Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Michael Wodrich (---.customer.vsm.sh)
Datum:   10.04.19 07:52

Und wenn Du die Elemente nicht auf das Hauptfenster, sondern auf das TabControl beziehst?

Also statt %hwnd/&hwnd(vX3.1) einfach tabcontrol& verwendest?

GetSysColor(15) ist übrigens "color_3dface"
Wenn bei win10 das flat geschaltet ist, dann ist das evtl. nicht die richtige Hintergrundfarbe.

Da würde ich einfach mal die Elemente mit eigenen Farben versehen und experimentieren.

--
Programmieren, das spannendste Detektivspiel der Welt.
Programmierumgebung: | XProfan (neueste) | Win (neueste)


Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.04.19 16:32

Schau mal in der Hilfe bei Textcolor.
Da gibt es eine Auswahl : Callback (Textfeldfarbe)

Dort könnte man dann mit der Farbe weiß probieren.

H.Brill
XProfan X4 + FreeProfan
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen
den unseren hinzufügen.

Was die Borg können, können wir schon lange !!!

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Jens Lange (---.dip0.t-ipconnect.de)
Datum:   10.04.19 17:39

Also, einfach aufs Tabcontrol& beziehen... Beim RadioButton passt es, beim Textfeld passt es nicht.



Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Jens Lange (---.dip0.t-ipconnect.de)
Datum:   10.04.19 17:41

Callback... ja welchen Hintergrund leg ich fest, jeder der seinen Desktop andersfarbig gestaltet, hat dann Probleme. Das Programm soll nicht nur bei mir laufen können.

Bis WIN7 hat es ja sauber funktioniert... auch ohne CallBack.

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.04.19 18:52

Der Hintergrund des Desktops hat ja nichts damit zu tun.
Auch, wenn du einfach nur ein Fenster einfärbst, nimmt
dieses ja nicht automatisch den Hintergrund des Desktops
an. Das ist auch so bei jedem anderen Programm, das
gestartet wird.

Vielmehr muß man Rolands Fenster als Dialoge sehen.
Und diese sind nun mal grau. Deshalb wird in der Hilfe
im Beispielcode in die Windowsprozedur eingegriffen
und die Farben der Text-Controls verändert.


Da es in vorigen Windows Versionen funktionierte, kann
daran liegen, daß MS in seinen neusten Versionen etwas
verändert hat (Farbschema für Controls).

H.Brill
XProfan X4 + FreeProfan
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen
den unseren hinzufügen.

Was die Borg können, können wir schon lange !!!

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.04.19 19:16

So, hab selber mal etwas gespielt.
Anscheinend empfängt das Tabcontrol keine
~WM_CTLCOLORSTATIC - Message. Somit
muß man die Controls auf das %HWnd legen.

 $H Windows.ph
 $H Messages.ph
 
 
 Declare RADIO1&, RADIO2&, OldWndProc&, TextBk1&, hText1%, Tabcontrol&, Tabdialog%
 '----------------------------------------------------------------------------------
 Proc ColorText
   Parameters hWnd&, Message&, wParam&, lParam&
   If Message& = ~WM_CTLCOLORSTATIC
      If lParam& = hText1%
          ~SetBkMode(wParam&, ~TRANSPARENT)
          ~SetTextColor(wParam&, RGB(0, 0, 0)) 
           Return TextBk1&
      EndIf
   Else
      Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, \
      wParam&, lParam&)
   EndIf
 EndProc
 
 TextBk1& = ~CreateSolidBrush(RGB(255, 255, 255)) 
 
 Set("FastMode", 1)
 
 '----------------------------------------------
 WindowStyle 26+512
 WINDOWTITLE "Kassen-Verwaltung"
 WINDOW 0,0 - 700,700
 '--------------------------------------
 
 '--------------------------------------
 OldWndProc& = ~GetWindowLong(%hWnd, ~GWL_WNDPROC)
 ~SetWindowLong(%hWnd, ~GWL_WNDPROC, ProcAddr("ColorText", 4))
 
 Tabcontrol& = Create("Tabctrl",%hwnd,"Adresse",80,80,500,500)
 
 'transparenter hintergrund
 RADIO1& = Create("RADIOBUTTON",%HWnd,"0%",170,150,50,30)
 'transparenter hintergrund
 
 'kein transparenter hintergrund
 RADIO2& = CREATE("RADIOBUTTON",%HWnd,"7.00%",170,250,70,30)
 hText1% = Create("Text",%HWnd,"SPALTENSUMMEN",170,200,130,16)
 'kein transparenter hintergrund
 
 While 1
   WaitInput
   Case %Key = 2 : Break
 EndWhile
 
 ~DeleteObject(TextBk1&)
 ~SetWindowLong(%hWnd, ~GWL_WNDPROC, OldWndProc&)
 
 End
 
 



Vielleicht hat jemand noch eine Idee ?

H.Brill
XProfan X4 + FreeProfan
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen
den unseren hinzufügen.

Was die Borg können, können wir schon lange !!!

Nachricht bearbeitet (10.04.19 19:16)

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   11.04.19 10:56

Hi,

funktioniert vielleicht der folgende Code bei Dir?
(Kann es im Moment nicht unter Win 10 testen.)

Hintergrund:
So, wie es Microsoft vorschlägt, verwende ich immer Childwindows, vor allem auch zur funktionalen Unterteilung des Hauptfensters.

Gruß
KJ
 Declare RADIO1&, RADIO2&, Tabcontrol&, Tabdialog%
 '--------------------------------------
 WindowStyle 26
 WINDOWTITLE "Kassen-Verwaltung"
 WINDOW 0,0 - 700,700
 '--------------------------------------
 'Für Hauptfenster
 '--------------------------------------
 var handle mainchild = Create("ChildWindow",%hwnd, "", 0, 0, width(%hwnd), height(%hwnd))
 SetStyle mainchild, $50800000
 RADIO1& = Create("RADIOBUTTON",mainchild,"0%",170,45,50,30)
 '--------------------------------------
 'Für TabControl
 '--------------------------------------
 Tabcontrol& = Create("Tabctrl",mainchild,"Adresse",80,80,500,500)
 var handle tabchild = Create("ChildWindow",Tabcontrol&, "", 2, 25, width(Tabcontrol&)-6, height(Tabcontrol&)-28)
 SetStyle Tabchild, $50800000
 RADIO2& = CREATE("RADIOBUTTON",tabchild,"7.00%",170,245,70,0030)
 Create("Text",tabchild,"SPALTENSUMMEN",350,190,130,35)
 
 WaitKey
 DestroyWindow(%hwnd)
 End
 




Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   11.04.19 17:04

Funktioniert auch.

H.Brill
XProfan X4 + FreeProfan
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen
den unseren hinzufügen.

Was die Borg können, können wir schon lange !!!

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Jens Lange (---.dip0.t-ipconnect.de)
Datum:   11.04.19 17:26

Jungs, 10 Daumen hoch, es funktioniert. Bin bissel aus XPROFAN raus, programmiere seit fast 3 Jahren unter Linux mit PurebBasic. Aber man kommt halt immer mal wieder zu den Roots zurück.

DANKE

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Jens Lange (---.pools.arcor-ip.net)
Datum:   20.04.19 09:34

Hab mich weitergehend damit befaßt, die Universallösungen sind es nicht, geht unter WIN10, unter WIN7 haben beide Ihre "Macken"

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   20.04.19 11:36

Es kann ja durchaus windowsabhängig (MS) sein.
Dann kann man sowieso nichts daran ändern.

Und wenn du einfach mit der Systemvariablen

$WinVer


die Windowsversion abfrägst und dem entsprechend
den Code ausführst bzw. das TabControl setzt.?


WIN 7 ist 6.1 und WIN 10 ist 10.0.

H.Brill
XProfan X4 + FreeProfan
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen
den unseren hinzufügen.

Was die Borg können, können wir schon lange !!!

Nachricht bearbeitet (20.04.19 12:44)

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   21.04.19 08:56

Könntest du mal das unter den verschiedenen
WIN - Versionen ausprobieren ? :

 $H Windows.ph
 $H Messages.ph
 Def GetSysColor(1) !"USER32","GetSysColor"
 Def SetBkMode(2) !"GDI32","SetBkMode"
 Def SelectObject(2) !"GDI32","SelectObject"
 Def GetDC(1) !"USER32","GetDC"
 Def @Show(1) @ShowWindow(@&(1), 1)
 Def @Hide(1) @ShowWindow(@&(1), 0)
 Declare Ende%, OldWndProc_1&, AktivesTab&
 Declare Create_Text%[] , TextBk_1& , tabctrl1&
  
 '-CallBack Routine----------------------------------------------------
 Proc ColorText_TabCtrl
   Parameters hWnd&, Message&, wParam&, lParam&
   If Message& = ~WM_CTLCOLORSTATIC
     ~SetBkMode(wParam&, ~TRANSPARENT)
     ~SetTextColor(wParam&, GetSysColor(18))
     Return TextBk_1&
   Else
     Return ~CallWindowProc(OldWndProc_1&, hWnd&, Message&, wParam&, lParam&)
   EndIf
 EndProc
  
 Proc ColorText
   Parameters hs&,x%,y%
   Declare hdc&,Bk_Color&
   SetText hs&," "
   hdc&=GetDC(hs&)
   SetWindowPos hs&=x%,y% - 0,0
  SelectObject(hdc&,SendMessage(hs&,$031,0,0))
   SetBKMode(hdc&,1)
   StartPaint hdc&
     Bk_Color& = @GetPixel(0,0)
   EndPaint
   Return Bk_Color&
 EndProc
  
 '-Main----------------------------------------------------------------
  
 '-Erweitertes MessageHandling abschalten----------------------------
 Set("FastMode", 1)
  
 '-Fenster oeffnen---------------------------------------------------
 Window 0, 0 - 640, 480
  
 Cls ~GetSysColor(~COLOR_3DFACE)
  
 'Create Text Hintergrundfarben für das TabCtrl ermitteln ---------------
 tabctrl1& = Create("TabCtrl", %hwnd, "tab1", 8, 80, 328, 320)
 OldWndProc_1& = ~GetWindowLong(tabctrl1&, ~GWL_WNDPROC)
 ~SetWindowLong(tabctrl1&, ~GWL_WNDPROC, @ProcAddr("ColorText_TabCtrl", 4))
 InsertTab(tabctrl1&, 1, "tab2")
 Create_Text%[0] = Create("Text", tabctrl1&, " ", 10, 40, 10, 10)
 TextBk_1& = ~CreateSolidBrush(ColorText(Create_Text%[0],10,40))
  
 '-Textfelder------------------------------------------------------
 Create_Text%[0] = Create("Text", %Hwnd, "Text 1", 200, 10, 150, 16)
 Create_Text%[1] = Create("Text", tabctrl1&, "auf dem TabCtrl 1 ", 100, 70, 200, 16)
 Create_Text%[2] = Create("Text", tabctrl1&, "und auf dem TabCtrl 2", 100, 100, 200, 16)
 @Hide(Create_Text%[2])
 '-Dialog-Schleife---------------------------------------------------
 Clear Ende%
  
 WhileNot Ende%
   WaitInput
  
   If %Key = 2
     Ende% = 1
     Elseif Clicked(tabctrl1&) = 1
       AktivesTab& = @GetActiveTab(tabctrl1&)
       If AktivesTab& = 0
         @Hide(Create_Text%[2])
         @Show(Create_Text%[1])
         Elseif AktivesTab& = 1
           @Hide(Create_Text%[1])
           @Show(Create_Text%[2])
       Endif
  
   EndIf
 EndWhile
 ~DeleteObject(TextBk_1&)
 '-Urspruengliche ProgramMainRoutine wieder herstellen---------------
 ~SetWindowLong(tabctrl1&, ~GWL_WNDPROC, OldWndProc_1&)
  
 '-End-------------------------------------------------------------------
 End
 


Hatte ich noch in einem Forum gefunden. Behandelt ja genau dein
Problem.

Könnte man dann auch auf XProfans SubClassing umstellen.

H.Brill
XProfan X4 + FreeProfan
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen
den unseren hinzufügen.

Was die Borg können, können wir schon lange !!!

Nachricht bearbeitet (21.04.19 08:57)

Beitrag beantworten
 
 Re: Problem mit Text im Tabcontrol
Autor: Jens Lange (---.dip0.t-ipconnect.de)
Datum:   08.05.19 19:53

Ja, das ist ne Lösung, Danke, läuft auch korrekt.
Mein Programm wird erst fertig, wenn WIN7 die Updates eingestellt hat, läuft also nur unter WIN10 (Vorgabe Anwender). Für die Betas muss ich aber leider heute noch WIN7 berücksichtigen.
Hatte mir daher ne Fallunterscheidung überlegt

  Declare RADIO1&, RADIO2&, Tabcontrol&, Tabdialog%
  '--------------------------------------
  WindowStyle 26
  WINDOWTITLE "Kassen-Verwaltung"
  WINDOW 0,0 - 700,700
  '--------------------------------------
  'Für Hauptfenster
  '--------------------------------------
 if $winver = "10.0"
  var handle mainchild = Create("ChildWindow",%hwnd, "", 0, 0, width(%hwnd), height(%hwnd))
  SetStyle mainchild, $50800000
 elseif $winver="6.1"
  DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
  settruecolor 1
  CLS GETSYSCOLOR(15)
  var handle mainchild = %hwnd
 endif
 
  RADIO1& = Create("RADIOBUTTON",mainchild,"0%",170,45,50,30)
 
 '--------------------------------------
  'Für TabControl
  '--------------------------------------
 if $winver = "10.0"
  Tabcontrol& = Create("Tabctrl",mainchild,"Adresse",80,80,500,500)
  var handle tabchild = Create("ChildWindow",Tabcontrol&, "", 2, 25, width(Tabcontrol&)-6, height(Tabcontrol&)-28)
  SetStyle Tabchild, $50800000
 elseif $winver="6.1"
 var handle tabchild = Create("Tabctrl",mainchild,"Adresse",80,80,500,500)
 endif
 
 RADIO2& = CREATE("RADIOBUTTON",tabchild,"7.00%",170,245,70,0030)
 Create("Text",tabchild,"SPALTENSUMMEN",350,190,130,35)
 
  WaitKey
  DestroyWindow(%hwnd)
  End
 


Aber es gibt halt für jedes Problem noch ne elegantere Lösung (y)

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org