TabControl und Events
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:
Komme da nicht rein wenn ich auf einen Button klicke.
WM_NOTIFY:
begin begin nmptr := PNMHdr(lp); if (nmptr.code = TCN_SELCHANGE) then begin GetClientRect(WinHandle, rc); end; end; end; EDIT: OK punkt 1 ist erledigt normaler WM_LBUTTONUP gruss |
AW: TabControl und Events
Zu 1. aus der Unit ComCtrls:
Delphi-Quellcode:
...
procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; // <--- CN_ anstatt WM_ ...
Delphi-Quellcode:
Change wird in der abgeleiteten Klasse TPageControl aufgerufen:
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;
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; |
AW: TabControl und Events
Danke!
Werde mal schaun ob ich davon etwas für NonVCL umsetzen kann. TCustomTabControl kenne ich nicht ;) SysTabControl32 Zitat:
Glaube nicht. gruss |
AW: TabControl und Events
Zitat:
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. |
AW: TabControl und Events
Danke..
Ich habe das erste jetzt mit WM_LBUTTONUP gelöst.
Delphi-Quellcode:
Muss jetzt nur noch rausfinden wie ich das mit updown32 gelöst bekomme das es nicht angezeigt wird.
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; 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 |
AW: TabControl und Events
Zitat:
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. |
AW: TabControl und Events
Zitat:
Das hinzufügen dynamischer Tabs ist nur ein Test denn das muss ja auch funktionieren. Hmmm... mal schaun. :) So wird das Tab und der Button darauf erstellt. Das aussehen der Button vom TabSheet ist dann abhängig davon wie das BTN_Push.png aussieht das kann alle erdenkliche formen haben.
Delphi-Quellcode:
und so dynamisch erstellt.
TabInfo := CTRL_TabCreate;
TabInfo.ImagePath := SKAERO_FOLDER + 'BTN_Push.png'; TabInfo.Left := 230; TabInfo.Top := 268; TabInfo.Width := 300; TabInfo.Height := 250; TabInfo.DlgItemID := ID_TAB; TabInfo.ImageStateMax := 0; TabInfo.TabImagePath := SKAERO_FOLDER + 'TabFrame.png'; TabInfo.CreateWindow(hMain); SKAERO_SetAnchorMode(TabInfo.Handle, ANCHOR_HEIGHT_WIDTH); SKAERO_SetZorder(TabInfo.Handle, HWND_TOP); TabInfo.InsertItem(TabInfo.Handle, 0, 'Hello World'); TabInfo.SetCurSel(TabInfo.Handle, 0); TabHandle := TabInfo.AddTab(TabInfo.Handle, 0); btnTab0 := CTRL_PushButtonCreate; btnTab0.ImagePath := SKAERO_FOLDER + 'BTN_Push.png'; btnTab0.Text := 'Button on Tab Hello World'; btnTab0.Left := 20; btnTab0.Top := 20; btnTab0.Width := 180; btnTab0.Height := 75; btnTab0.DlgItemID := ID_BTN_TAB0; btnTab0.TextCol := SKAERO_BTNTEXTCOLOR; btnTab0.Label3D := 1; btnTab0.TextAlligment := Center; btnTab0.ImageStateMax := 0; btnTab0.CreateWindow(TabHandle); SKAERO_SetAnchorMode(btnTab0.Handle, ANCHOR_BOTTOM_RIGHT); SKAERO_SetZorder(btnTab0.Handle, HWND_TOP);
Delphi-Quellcode:
So kann man jetzt xbeliebige Controls im Tab erstellen.
ID_BTN_ADDTAB:
begin ItemCount := TabInfo.GetItemCount(TabInfo.Handle); TabInfo.InsertItem(TabInfo.Handle, ItemCount + 1, PWideChar('Tab ' + IntToStr(ItemCount))); TabHandle := TabInfo.AddTab(TabInfo.Handle, ItemCount); AddCtrlToTab(TabHandle, ItemCount); SKAERO_UpdateWindow(WinHandle, False); end; Hier nur die ersten 2 die anderen bleiben leer. Einmal einen Button und einmal eine Tackbar
Delphi-Quellcode:
gruss
procedure AddCtrlToTab(TabHandle: Integer; Item: Integer);
var myTip: PWideChar; begin case Item of 1: begin btnTab1 := CTRL_PushButtonCreate; btnTab1.ImagePath := SKAERO_FOLDER + 'BTN_Push.png'; btnTab1.Text := 'Button on Tab 1'; btnTab1.Left := 20; btnTab1.Top := 40; btnTab1.Width := 120; btnTab1.Height := 75; btnTab1.DlgItemID := ID_BTN_TAB1; btnTab1.TextCol := SKAERO_BTNTEXTCOLOR; btnTab1.Label3D := 1; btnTab1.ImageStateMax := 0; btnTab1.CreateWindow(TabHandle); SKAERO_SetAnchorMode(btnTab1.Handle, ANCHOR_BOTTOM_RIGHT); SKAERO_SetZorder(btnTab1.Handle, HWND_TOP); end; 2: begin SKAERO_SplitColorARGB(SKAERO_AEROCOLOR, Alpha, Red, Green, Blue); trbTab := CTRL_TrackBarCreate; trbTab.ImageThumbPath := SKAERO_FOLDER + 'BTN_Track_H.png'; trbTab.Left := 38; trbTab.Top := 40; trbTab.Width := 142; trbTab.Height := 14; trbTab.DlgItemID := ID_TRACK_TAB; trbTab.MinVal := 0; trbTab.MaxVal := 255; trbTab.Val := Alpha; trbTab.LineVisible := true; trbTab.TrackColor := SKAERO_TRACKHICOLOR; trbTab.ProgressColor := SKAERO_TRACKPROGRESSCOLOR; trbTab.ParentWindow := MainHandle; trbTab.CreateWindow(TabHandle); SKAERO_SetAnchorMode(trbTab.Handle, ANCHOR_BOTTOM); SKAERO_SetZorder(trbTab.Handle, HWND_TOP); myTip := 'Only Test'; CTRL_ToolTipCreate(trbTab.Handle, myTip); end; end; end; |
AW: TabControl und Events
Zitat:
|
AW: TabControl und Events
Zitat:
gruss |
AW: TabControl und Events
Ich subclasse das UpDown32 control nun da ich denke das es der sauberste weg ist.
Das was man ganz rechts sieht das Rechteck über dem letzten Tab ist das Control mit draufgerenderten Hintergrund. Muss jetzt nur noch die Button erstellen und das Handling des Paint Event verbessern danach melde ich mich nochmal. Funktioniert jetzt so wie es soll. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz