AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Reiter in einem TPageControl disabeln

Ein Thema von jryan · begonnen am 8. Apr 2004 · letzter Beitrag vom 21. Jul 2006
Antwort Antwort
jryan

Registriert seit: 25. Nov 2003
19 Beiträge
 
Delphi 7 Architect
 
#1

Reiter in einem TPageControl disabeln

  Alt 8. Apr 2004, 10:13
Hallo allerseits!

ich habe folgendes Problem:

In einer Applikation mit einem TPageControl und mehreren TTabSheet's in diesem Control sollen die Tabsheets in Abhängigkeit von den Benutzerrechten bzw. von programminternen Abhängigkeiten enabled bzw. disabled werden. Dabei stelle ich mir das Ergebnis so vor, das eine disabled Registerseite im Tabsheet zwar noch sichtbar ist aber die Caption wie bei einem disableden TButton-Object aussieht. Beim klicken auf ein solches Register, soll die Seite dann nicht angezeigt werden.

Meine bisherigen Lösungsvarianten, welche leider NICHT das gewünschte Verhalten erzeugen waren:

Variante 1:
Setzen der Enabled-Eigenschaft des ensprechenden Tabsheets als eigentlich naheliegenste Variante. Dies führt aber leider nur dazu, das der Benutzer die im Tabpage vorhanden Steuerelemente nicht mehr ansprechen (den Focus darauf setzen) kann. Die eigentliche Tabsheet war aber weiterhin anzeigbar.

Variante 2:
Setzen der TabVisible-Eigenschaft --> Dabei ist aber leider der Karteireiter nicht mehr sichtbar!

Hat jemand von euch einen guten Tip???

MfG
-jryan
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Reiter in einem TPageControl disabeln

  Alt 8. Apr 2004, 10:33
Füge für jedes TabSheet eine Routine für das OnEnter-Ereignis ein. Darin fragst du die Enabled-Eigenschaft des Senders ab. Ist diese False, so kannst du:
- Bei allen Komponenten auf dem TabSheet Visible auf False setzen
- Ein Panel anzeigen, das vor allen Komponenten angezeigt wird, und diese somit unsichtbar macht.

Durch eine dieser beiden Methoden kann der Anwender die Komponenten nicht mehr sehen.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Reiter in einem TPageControl disabeln

  Alt 8. Apr 2004, 10:35
Hai jryan,

Zum "Anzeigen" ob der Reiter "enabled" ist kannst Du das OnDrawTab Ereigniss benutzen.
z.B:
Delphi-Quellcode:
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
const
 _sTabCaptions : array [0..1] of string = ('Stammdaten','Ansprechpartner');
begin
 if (Tab_is_enabled) then // hier muss deine Bedingung abgefragt werden.
 begin
   PageControl1.Canvas.Brush.Color := cllime;
 end
 else
 begin
   PageControl1.Canvas.Brush.Color := clSilver;
 end;
 Control.Canvas.FillRect(Rect);
  //Beim selber Zeichnen muss auch die Caption gezeichnet werden
 Control.Canvas.TextOut(Rect.Left+2,Rect.Top+2,_sTabCaptions[TabIndex]);
end;
Um zu verhindern das die TabSeite geöffnet wird verwendest Du einfach das OnChanging Ereigniss. Dort kansst Du verhinden das eine TabSeite geöffnet wird.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

Re: Reiter in einem TPageControl disabeln

  Alt 8. Apr 2004, 10:37
Schau Dir mal diesen Link an, dort findest Du den Quelltext für eine Pagecontrol-Komponente von Peter Below, die das kann, was Du willst.

Gruß, teebee
  Mit Zitat antworten Zitat
jryan

Registriert seit: 25. Nov 2003
19 Beiträge
 
Delphi 7 Architect
 
#5

Re: Reiter in einem TPageControl disabeln

  Alt 8. Apr 2004, 10:49
@all,
Danke für die schnelle Hilfe!

Ich denke ich werde mal sehen wie die erweiterte Komponente von Peter Belows funktioniert!

MfG
-jryan
  Mit Zitat antworten Zitat
Benutzerbild von Kevin
Kevin

Registriert seit: 11. Feb 2004
Ort: Bonn
576 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Reiter in einem TPageControl disabeln

  Alt 8. Apr 2004, 11:02
@jryan
Kannst Du dann bitte ein Feedback posten!? Würde mich sehr interessieren!
Kevin
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Reiter in einem TPageControl disabeln

  Alt 8. Apr 2004, 19:18
Hallo den link habe ich mir jetzt nicht ganz genau angeguugt, sieht aber anders aus wie meins. Bei DF und DG gabs mal nen ähnlichen thread dazu http://www.delphi-forum.de/viewtopic...ht=pagecontrol
Dann wird die Caption schön "disabled" wie bei einem Button dargestellt

Delphi-Quellcode:
  TForm1 = class(TForm)
   ...
  private
    { Private-Deklarationen }
    AltePagecontrolSeite: integer;
...

procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  ATabIndex: Integer; const Rect: TRect; Active: Boolean);
//bitte Tabindex in Deklaration mit ATabindex auswechseln, sonst überschneidung mit Pagecontrol.tabindex. Deklaration in Tform nicht vergessen
//ownerDraw des pagecontrols auf true setzen
begin
  with control as TPageControl do
    begin
      //jede zweite Seite "disablen"
      if odd(Atabindex) then
        begin
          canvas.Brush.Style := bssolid;
          canvas.font.Color := clBtnHighlight;
          canvas.TextOut(rect.left+6,rect.top+5,Pages[ATabindex].Caption);

          //text in anderer Farbe wieder drüberzeichnen (1 Pixel nach links oben versetzt)
          canvas.Brush.Style := bsclear;
          canvas.font.Color := clBtnShadow;
          canvas.TextOut(rect.left+5,rect.top+4,Pages[ATabindex].Caption);
        end
       else
        begin
          //sonst normal zeichnen
          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);
//Selektieren einer Seite verhindern.
begin
  with sender as TPageControl do
    begin
      //jede zweite Seite "disablen"
      if odd(ActivePageIndex) then ActivePageIndex:=AltePagecontrolSeite;
    end;
end;
Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
triangulum

Registriert seit: 21. Jul 2006
39 Beiträge
 
Delphi 7 Professional
 
#8

Re: Reiter in einem TPageControl disabeln

  Alt 21. Jul 2006, 09:16
Salü,

habe jetzt auch diese Lösung angewendet, um inaktive Tabs grau darzustellen.

Problem:

das OnDrawTab - Ereignis wird nur dann ausgelöst, wenn man irgendwo auf das PageControl1 clickt.

Der Tab-Status kann/soll sich aber bereits ändern, wenn man aus einem Menü oben eine Datei lädt z.B. werden z.B. einige Tabs mit ausgelesenen Infos gefüllt und sollen sofort schwarz beschriftet sein. Dies erfolgt aber nicht, sondern nur nach Klicken auf eines der (noch grauen) Tab-Titel!

Wie könnte man das OnDrawTab - Ereignis auch "künstlich" auslösen, z.B. im Rahmen eines Menüereignisses wie Open File ?

Oder sonstwie das PageControl redrawen?
Multa narrare possum, sed longum est ....
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Reiter in einem TPageControl disabeln

  Alt 21. Jul 2006, 22:01
Hallo

erzwing mal das neuzeichnen mit pagecontrol.repaint.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  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 13:49 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