AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TPageControl ändern der BevelKind bei TabPosition tbLeft

TPageControl ändern der BevelKind bei TabPosition tbLeft

Ein Thema von completestranger · begonnen am 12. Feb 2019 · letzter Beitrag vom 14. Feb 2019
Antwort Antwort
completestranger

Registriert seit: 7. Okt 2018
8 Beiträge
 
#1

TPageControl ändern der BevelKind bei TabPosition tbLeft

  Alt 12. Feb 2019, 17:26
Hi,

man nehme eine TPageControl, gibt dieser eine NewPage und ändert die TabPosition auf tbLeft.

Dann merkt man schnell, dass die Anzeigefläche rechts neben den Tabs ein BevelKind von bkRaised aufweist. Bei TabPosition tbTop ist das nicht der Fall.

Weißt jemand wie man diese entfernen kann?

Ich bin davon überzeugt, dass die Ursache in VCL zu finden sein muss, da bei einer SysTabControl32 (WC_TABCONTROL) mit TCS_VERTICAL dies nicht der Fall ist.

"Beweise" sind im Anhang zu finden.

Vielen Dank.
Miniaturansicht angehängter Grafiken
controlspy.png   pagecontrol.png  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.816 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: TPageControl ändern der BevelKind bei TabPosition tbLeft

  Alt 12. Feb 2019, 18:56
Ich bin davon überzeugt, dass die Ursache in VCL zu finden sein muss, da bei einer SysTabControl32 (WC_TABCONTROL) mit TCS_VERTICAL dies nicht der Fall ist.
Die VCL zeichnet bei einem TPageControl eigentlich nichts selbst. Zeig doch mal den Code für das SysTabControl32. Dann könnte man das mit dem des TPageControl vergleichen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
completestranger

Registriert seit: 7. Okt 2018
8 Beiträge
 
#3

AW: TPageControl ändern der BevelKind bei TabPosition tbLeft

  Alt 12. Feb 2019, 20:40
Da wurde ich falsch verstanden, glaube ich. Ich bin der Meinung, dass eben TPageControl eine normale SysTabControl32 ist. Und bei einer normalen SysTabControl32 das eben nicht passiert.
Sondern VCL irgendwas noch hinzufügt.

Das TPageControl ist ein SysTabControl32.
Code:
TPageControl = class(TCustomTabControl)

...

procedure TCustomTabControl.CreateParams(var Params: TCreateParams);
...
begin
...
CreateSubClass(Params, WC_TABCONTROL);
...
Und WC_TABCONTROL ist in Winapi.CommCtrl.pas als
Code:
const
  {$EXTERNALSYM WC_TABCONTROL}
  WC_TABCONTROL = 'SysTabControl32';
definiert.

Ich dachte immer:
Die Controls die von TWinControl abstammen sind alles native Windows Controls.
In Vcl.ComCtrls sind alles native Common Controls aus ComCtl32.dll.
TPageControl = SysTabControl32
TToolBar = ToolbarWindow32
TMonthCalendar = SysMonthCal32
...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.816 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: TPageControl ändern der BevelKind bei TabPosition tbLeft

  Alt 12. Feb 2019, 22:12
Da wurde ich falsch verstanden, glaube ich.
Das glaube ich nicht.

Ich bin der Meinung, dass eben TPageControl eine normale SysTabControl32 ist.
Das ist auch so.

Und bei einer normalen SysTabControl32 das eben nicht passiert.
Was ist denn ein "normales" SysTabControl32?

Sondern VCL irgendwas noch hinzufügt.
Oder weglässt.

Es geht mir darum, die Sourcen des funktionierenden Beispiels mit denen der VCL zu vergleichen. Deswegen weine Frage danach.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
318 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TPageControl ändern der BevelKind bei TabPosition tbLeft

  Alt 13. Feb 2019, 12:25
Man beachte, dass die Darstellung der common controls von Windows Themes und den Desktop-Settings (Aero oder classic) beeinflußt wird und TPagecontrol (auch auf der API Ebene) Tabs links und rechts nicht so gut unterstützt wie oben und unten. Wenn man das Standard-Windows Theme verwendet (default) wird ein TTabcontrol oder TPagecontrol etwas anders gezeichnet wenn die Tabs vertikal sind. Das fällt besonders bei TTabcontrol auf, da sich auch die Hintergrundfarbe der client area ändert. Verwendet man einen der custom styles passiert das nicht.

Da TCustomTabcontrol on TWinControl abstammt erbt es auch den ganzen zusätzlichen Code zur Unterstützung der Style-Engine sowie Desktop composition, und es nicht gerade einfach, da zu erkennen was nun von Windows gezeichnet wird und was von der VCL...
Peter Below
  Mit Zitat antworten Zitat
completestranger

Registriert seit: 7. Okt 2018
8 Beiträge
 
#6

AW: TPageControl ändern der BevelKind bei TabPosition tbLeft

  Alt 14. Feb 2019, 16:19
Oder weglässt.
Ja, ich habe den "Trick" gefunden der hier verwendet wird.

Ich zitiere aus https://docs.microsoft.com/en-us/win...control-styles:

Zitat:
The following styles can be modified after the control is created.

...
TCS_VERTICAL
Der Trick hierbei ist anscheinend, dass bei CreateWindowEx() der BorderStyle, etc. bereits festgelegt werden. Wenn man nun zur Laufzeit via

Code:
var
  TempStyle: NativeInt;
begin
  TempStyle := GetWindowLong(PCContent.Handle, GWL_STYLE);
  TempStyle := TempStyle or TCS_VERTICAL;
  SetWindowLong(PCContent.Handle, GWL_STYLE, TempStyle);
end;
den Style auf TCS_VERTICAL ändert, dann behält dieser den ursprünglichen BorderStyle bei und es sieht schön (für den Geschmack des Projektleiters) aus.

Und ja, wenn es komplett neu gezeichnet bzw. neu erstellt wird, z. B. durch ReCreate, dann sieht es hier auch wieder bescheiden aus.

Ich habe einen Screenshot für TabPosition := tpLeft zur Design- und Laufzeit angehängt.
Miniaturansicht angehängter Grafiken
tabposition_tpleft_designzeit.png   tabposition_tpleft_laufzeit.png  
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf