AGB  ·  Datenschutz  ·  Impressum  







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

CheckBox grayed ...

Offene Frage von "FriFra"
Ein Thema von FriFra · begonnen am 27. Sep 2007 · letzter Beitrag vom 28. Sep 2007
Antwort Antwort
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

CheckBox grayed ...

  Alt 27. Sep 2007, 21:33
Ich hab ein kleines Problem mit Checkboxen auf einem Formular...

Einige CheckBoxen müssen in bestimmten Situationen grayed sein. Dafür gibt es ja den State csGrayed.... allerdings ist die Box dabei checked, was aber nicht in jedem Fall passt. Enabled auf False zu setzen ist auch keine Lösung, da dabei auch der Text ausgegraut ist und eine "grayed checked" Darstellung so auch nicht möglich ist...
Das nächste Problem wäre, dass die grayed Check Boxen auch quasi disabled sein sollen, nur das disabled hier mit dem ausgrauen des Textes zu weit geht... sie soll einfach nicht mehr klickbar sein.

Ich brauche also die Stati:
csGrayedUncheckedLocked
csGrayedCheckedLocked;


Da es sich ja um Standard Windows controls handelt, hoffe ich, dass ich denen einfach eine entspr. Message senden muss um dieses Verhalten auszulösen
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#2

Re: CheckBox grayed ...

  Alt 27. Sep 2007, 21:36
hmm nur so als spontane idee:
wenn im OnClick jemand versucht die checkbox zu "enthacken" dann mach des einfach mit einem .checked := true rückgängig
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: CheckBox grayed ...

  Alt 27. Sep 2007, 21:46
oder du nimmst ne checkbox und beschriftest sie nicht, sondern schiebst noch ein label hinterher.
dann sieht das so aus als wäre sie beschriftet, und du kannst die checkbox disablen.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#4

Re: CheckBox grayed ...

  Alt 27. Sep 2007, 21:55
Nein... das geht beides nicht... Die Checkboxen sollen ja auch mal wieder enabled werden können, da sollen sie sich auch wie eine checkbox verhalten., das ist bei einem daneben liegenden label für die Beschriftung nicht gegeben.
Außerdem sieht man bei einer disableden Box nicht ob sie checked ist... also alles nicht geeignet!

Ich brauche tatsächlich GRAYED-CHECKED und GRAYED-UNCHECKED.... das müssen doch die Controls hergeben, andere Programme können das dch auch
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
efknarf

Registriert seit: 13. Jan 2007
Ort: Erfurt
21 Beiträge
 
Delphi 2007 Professional
 
#5

Re: CheckBox grayed ...

  Alt 28. Sep 2007, 02:17
Hallo,

für deine Zwecke ist es wohl am einfachsten, eine eigene Komponente zu entwerfen, welche diese 4 "Checkstufen" hat. Um die vorhandenenen Checkboxen zu "disablen", ohne daß der Text ausgegraut wird, kannst du diese auf einem Panel oder einer Groupbox platzieren und dann das Panel / die Groupbox ausschalten. Dann sieht die Checkbox aus wie bisher, ist aber nicht mehr anklickbar.

Eine einfache Komponente (allerdings ohne Eingabefocus) wäre vielleicht ein Label, auf welchem je nach Checkstatus ein weißes, graues oder sonstiges Quadrat gezeichnet wird mit einem "X" drin, wenn es gecheckt sein soll.
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#6

Re: CheckBox grayed ...

  Alt 28. Sep 2007, 06:48
Ich hab mir auch eine Checkbox selbst gemacht, nachdem es das was ich wollte nicht fertig gab.

Hier der Quellcode, vielleicht kannst du ja was davon nutzen.

Delphi-Quellcode:
const
  //Anwendungsfarben
  clXTBackground = clInactiveCaption;
  clXTDisabledControl = cl3DDkShadow;
  clXTInactiveControl = cl3DLight;
  clXTActiveControl = $00C8F5F9;
  clXTDisabledControlText = clBtnShadow;
  clXTEnabledControlText = clBlack;
  clXTControlBorder = clBtnShadow;
  clXTMarker = $000080FF;


type
  TXTCheckBox = class(TCustomControl)
  private
    PFState: TCheckBoxState;
    FEnabled: Boolean;
    FBoxColor: TColor;
    function GetChecked: Boolean;
    procedure SetChecked(Value: Boolean);
  protected
    procedure Paint; override;
    procedure Toggle; virtual;
    procedure Click; override;
    procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
    procedure CMExit(var Message: TCMGotFocus); message CM_EXIT;
  public
    Caption: TCaption;
    constructor Create(AOwner: TComponent; AParent: TWinControl; ATop:Integer);Reintroduce;
    property State: TCheckBoxState read PFState;
  published
    property Checked: Boolean read GetChecked write SetChecked;
    property Enabled: Boolean read FEnabled write FEnabled default True;
    property OnClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnEnter;
    property OnExit;
    property OnKeyPress;
    property OnKeyDown;
    property OnKeyUp;
  end;

//==============================================================================
// XTCheckBox

constructor TXTCheckBox.Create(AOwner: TComponent; AParent: TWinControl; ATop:Integer);
begin
  inherited Create(AOwner);
  Parent:=AParent;
  Top:=ATop;
  Left:=5;
  ControlStyle := [csCaptureMouse, csClickEvents, csDesignInteractive];
  FEnabled := True;
  Width := 117;
  Height := 17;
  FBoxColor:=clXTInactiveControl;
end;

procedure TXTCheckBox.Paint;
var
   R:TRect;
begin
  with Canvas do
  begin
//Linie und Beschriftung
    Pen.Color:=clXTControlBorder;
    Pen.Width:=1;
    MoveTo(0,Height-2);
    LineTo(Width-16,Height-2);
    if FEnabled then Font.Color:=clBtnText
    else Font.Color:=clBtnShadow;
    Brush.Color:=Color;
    TextOut(2,1,Caption);
//Rechteck
    R.Top:=0;
    R.Left:=Width-16;
    R.Bottom:=16;
    R.Right:=Width;
    Brush.Color:=FBoxColor;
    FillRect(R);
    Rectangle(R);
//Checked
    if PFState=cbChecked then
    begin
      Pixels[R.Left+4,R.Top+4]:=clBlack;
      Pixels[R.Left+5,R.Top+5]:=clBlack;
      Pixels[R.Left+6,R.Top+6]:=clBlack;
      Pixels[R.Left+7,R.Top+7]:=clBlack;
      Pixels[R.Left+8,R.Top+8]:=clBlack;
      Pixels[R.Left+9,R.Top+9]:=clBlack;
      Pixels[R.Left+10,R.Top+10]:=clBlack;
      Pixels[R.Left+11,R.Top+11]:=clBlack;
      Pixels[R.Left+4,R.Top+11]:=clBlack;
      Pixels[R.Left+5,R.Top+10]:=clBlack;
      Pixels[R.Left+6,R.Top+9]:=clBlack;
      Pixels[R.Left+7,R.Top+8]:=clBlack;
      Pixels[R.Left+8,R.Top+7]:=clBlack;
      Pixels[R.Left+9,R.Top+6]:=clBlack;
      Pixels[R.Left+10,R.Top+5]:=clBlack;
      Pixels[R.Left+11,R.Top+4]:=clBlack;
    end;
  end;
end;


function TXTCheckBox.GetChecked;
begin
  Result := not(State = cbUnChecked);
end;


procedure TXTCheckBox.SetChecked;
begin
  if Value and FEnabled then
    PFState := cbChecked
  else
    PFState := cbUnChecked;
  Paint;
end;


procedure TXTCheckBox.Toggle;
begin
  Checked := not Checked;
end;


procedure TXTCheckBox.Click;
begin
  if FEnabled then begin
    Toggle;
    SetFocus;
  end;
  inherited Click;
end;

procedure TXTCheckBox.CMEnter(var Message: TWMNoParams);
begin
  FBoxColor:=clXTActiveControl;
  Paint;
  inherited;
end;

procedure TXTCheckBox.CMExit(var Message: TWMNoParams);
begin
  FBoxColor:=clXTInactiveControl;
  Paint;
  inherited;
end;
  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 09:11 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