Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - PageControl - (Tab / Reiter / Register).Enabled := False?
mb - Di 10.02.04 15:26
Titel: PageControl - (Tab / Reiter / Register).Enabled := False?
Hi!
PageControls sind echt faszinierend. Also ich habe mal gesucht, und das Problem scheint auch in diesem Forum schon aufgetreten zu sein - aber keine Lösung...
Das Problem: Ich möchte einzelne Seiten in einem PageControl deaktivieren. Und zwar so, dass man die Reiter bzw. Buttons / FlatButtons noch sieht, die sollen aber "Enabled := False" sein, d.h.: man soll sie nicht anklicken können.
Die Möglichkeit alle Controls auf einem TabSheet zu disabeln habe ich probiert... ja, aber das ist nicht ganz das, was ich will.
Kennt jemand eine Möglichkeit? Kann man irgendwie an die Buttons als Control (TObject oder so) ran kommen?
Könnte man dann auch die Buttons gleich im XP-Style zeichnen? (Ich verwende gerade flatButtons)
Keldorn - Di 10.02.04 18:07
Hallo
um zu verhindern, das ein user eine Seite nicht anklicken kann, gugg dir onchanging des Pagecontrols an.
Mfg Frank
mb - Mi 11.02.04 03:02
Ja, diese Möglichkeit ist mir bekannt, aber in meinem Fall zu kompliziert. Außerdem würde ich es ja gern so haben, dass die Buttons (Tabs) wirklcích "disabled" (also praktisch "grayed") dargestellt werden und gar nicht anklickbar sind...
Keldorn - Mi 11.02.04 12:02
Hallo
im DG gabs einen ähnlichen Thread, und es hat mich jetzt mal genauer interessiert.
Ich habs jetzt mal so probiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| TForm1 = class(TForm) ... private AltePagecontrolSeite: integer; ...
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl; ATabIndex: Integer; const Rect: TRect; Active: Boolean); begin with control as TPageControl do begin if odd(Atabindex) then begin canvas.Brush.Style := bssolid; canvas.font.Color := clBtnHighlight; canvas.TextOut(rect.left+6,rect.top+5,Pages[ATabindex].Caption);
canvas.Brush.Style := bsclear; canvas.font.Color := clBtnShadow; canvas.TextOut(rect.left+5,rect.top+4,Pages[ATabindex].Caption); end else begin canvas.Brush.Style := bssolid; canvas.font.Color := clbtntext; canvas.TextOut(rect.left+6,rect.top+5,Pages[ATabindex].Caption); end; end; end;
procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean); begin AltePagecontrolSeite:=(sender as TPageControl).ActivePageIndex; end;
procedure TForm1.PageControl1Change(Sender: TObject); begin with sender as TPageControl do begin if odd(ActivePageIndex) then ActivePageIndex:=AltePagecontrolSeite; end; end; |
Ich bin mir zwar mit der Farbwahl nicht sicher, aber aussehen tuts erstmal :).
Mfg Frank
mb - Mi 11.02.04 14:44
Ok, danke!!!
Das sieht nach einer Lösungsmöglichkeit aus. Ich werd's mal probieren.
johakbb - Fr 22.10.10 20:41
Super, danke für den guten Tipp! Der Thread ist zwar schon etwas älter, aber für Delphi2010 habe ich auch keine bessere Methode gefunden, scheint immer noch aktuell zu sein.
Allerdings gabs bei mir in der "enabled"-Darstellung kleine Fehler: die weiße Linie, die die "hinteren" Tabs vom Vordergrund abtrennen soll, lief auch beim aktiven Tab durch, so dass dieser wie nach hinten gestellt wirkte. Außerdem war der schwarze Text etwas ausgefranst, wie doppelt, aber nicht genau übereinander. Durch ein Neubefüllen des Hintergrunds mit FillRect lies sich das beheben, also:
Delphi-Quelltext
1: 2: 3: 4: 5:
| canvas.Brush.Style := bsSolid; canvas.Font.Color := clBtnText; canvas.FillRect(rect); canvas.TextOut(rect.left+6,rect.top+5,Pages[ATabindex].Caption); |
Vielleicht hilft das jemandem.
Gruß, johakbb
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!