AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TabControl und Events

Ein Thema von EWeiss · begonnen am 9. Jul 2018 · letzter Beitrag vom 10. Jul 2018
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

TabControl und Events

  Alt 9. Jul 2018, 07:11
Ich habe ein Transparentes TabControl erstellt.
Meine Probleme die ich habe sind 2 an der Zahl.

1. Welches Event wird ausgelöst beim klick auf einem Item.
2. Wie bekomme ich das updown control weg? Will da lieber was eigenes machen gibt es da einen Schalter?

Mein Versuch mit WM_NOTIFY bringt leider nichts.
Delphi-Quellcode:
    WM_NOTIFY:
      begin
        begin
          nmptr := PNMHdr(lp);
          if (nmptr.code = TCN_SELCHANGE) then
          begin
            GetClientRect(WinHandle, rc);
          end;
        end;
      end;
Komme da nicht rein wenn ich auf einen Button klicke.

EDIT:
OK punkt 1 ist erledigt normaler WM_LBUTTONUP

gruss

Geändert von EWeiss (11. Jul 2019 um 15:52 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TabControl und Events

  Alt 9. Jul 2018, 08:46
Zu 1. aus der Unit ComCtrls:

Delphi-Quellcode:
...
procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; // <--- CN_ anstatt WM_
...
Delphi-Quellcode:
procedure TCustomTabControl.CNNotify(var Message: TWMNotify);
begin
  with Message do
    case NMHdr.code of
      TCN_SELCHANGE:
        Change;
      TCN_SELCHANGING:
        begin
          Result := 1;
          if CanChange then Result := 0;
        end;
    end;
end;
Change wird in der abgeleiteten Klasse TPageControl aufgerufen:

Delphi-Quellcode:
procedure TPageControl.Change;
var
  Form: TCustomForm;
begin
  if TabIndex >= 0 then
    UpdateActivePage;
  if csDesigning in ComponentState then
  begin
    Form := GetParentForm(Self);
    if (Form <> nil) and (Form.Designer <> nil) then
      Form.Designer.Modified;
  end;
  inherited Change;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: TabControl und Events

  Alt 9. Jul 2018, 08:56
Danke!
Werde mal schaun ob ich davon etwas für NonVCL umsetzen kann.
TCustomTabControl kenne ich nicht SysTabControl32

Zitat:
// <--- CN_ anstatt WM_
Auch bei NonVCL ?
Glaube nicht.

gruss

Geändert von EWeiss ( 9. Jul 2018 um 08:58 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TabControl und Events

  Alt 9. Jul 2018, 10:04
Danke!
Werde mal schaun ob ich davon etwas für NonVCL umsetzen kann.
TCustomTabControl kenne ich nicht SysTabControl32

Zitat:
// <--- CN_ anstatt WM_
Auch bei NonVCL ?
Glaube nicht.
TCustomTabControl ist die VCL-Kapselung für SysTabControl32.
Deine Kapselung heißt natürlich anders, weil du ja alles selber machst.

Außerdem hast du Recht mit WM_NOTIFY.
In der VCL-Variante wird explizit in Controls.DoControlMsg der Offset mit CN_BASE hinzugefügt.
Man könnte sagen, die Message wird neu gemappt.
Jetzt müsste man nur noch rausfinden, warum das so gelöst wurde.
Das hatte gewiss einen spezifischen Hintergrund.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: TabControl und Events

  Alt 9. Jul 2018, 10:31
Danke..

Ich habe das erste jetzt mit WM_LBUTTONUP gelöst.
Delphi-Quellcode:
    WM_LBUTTONUP:
      begin
        Item := GetCurSel(WinHandle);
        FSelectedItem := Item;

        ItemCount := GetItemCount(WinHandle);
        for IntI := 0 to ItemCount - 1 do
        begin
          if IntI <> FSelectedItem then
          begin
            HItem := GetDlgItem(FParentHandle, ID_PANEL_FIRST + IntI);
            if HItem <> 0 then
              ShowWindow(HItem, SW_HIDE)
          end;
        end;
        HItem := GetDlgItem(FParentHandle, ID_PANEL_FIRST + FSelectedItem);
        if HItem <> 0 then
          ShowWindow(HItem, SW_SHOW);

        SkinEngine.FInvalidateRect(WinHandle, false);
      end;
Muss jetzt nur noch rausfinden wie ich das mit updown32 gelöst bekomme das es nicht angezeigt wird.
Notfalls muss ich halt dieses Control auch noch pimpen.

Habe mal einen Test angehängt.
Mich würde interessieren ob das TabControl bei euch auch transparent ist. (Win7 sollte gehen).

gruss

Geändert von EWeiss (11. Jul 2019 um 15:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#6

AW: TabControl und Events

  Alt 9. Jul 2018, 10:39
Zitat:
Wie bekomme ich das updown control weg? Will da lieber was eigenes machen gibt es da einen Schalter?
Billige Lösung: Nur die Tabs anzeigen, welche sichtbar sind / sein sollen und die Anderen auf Invisible.
Und beim Scrollen die Sichbarkeiten halt entsprechend anpassen.

Also von vorne x Tabs ausgeblendet, entsprechend Scrollposition und danach x Tabs sichtbar, wie angezeigt werden können.



Alternativ als MultilineTabcontrol und alle Tabs mehrzeilig anzeigen ... da gibt es diese Buttons auch nicht.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Jul 2018 um 10:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz