Simple medio de hacer algunos de los componentes de datos conscientes. Alternativas de datos consciente de casillas de verificación (y radiobuttons) que se pueden arreglar con más flexibilidad.

Aunque las versiones más recientes de Delphi puede ofrecer mejores formas de visualización de datos consciente de las colecciones de casillas y radiobuttons, todavía estoy utilizando D4. A menudo he deseado una base de datos-componente consciente de que (a) no incluye la caja de biselados D4 del grupo de botones de selección, (b) puede hacerse a parecerse a algunos formularios en papel más de cerca, (c) permisos más flexible de los temas en el grupo, y (d) permisos de todas las pautas inusuales de botones para ser 'en' y 'desactivar' simultáneamente.

En resumen, más flexibilidad.

Creo que esta receta hace esto, y también ilustra simple medio para realizar algunos controles que no son conscientes de datos adquirir esta capacidad mediante la cooperación con los que están.

delphi.jpg

La parte superior e inferior de las filas de casillas de verificación están representados en el código de Delphi por debajo de las clases TCheckboxCollection y TPersonalityCBCollection respectivamente. Cada una de estas clases es un contenedor para los descriptores de casilla y sus métodos, haga clic, GetValue y SetValue, establecer el comportamiento de los controles colectiva, y disponer lo necesario para asociar su colectivo con el valor de datos asociadas-conscientes de control y, por tanto, con el almacén de datos.

La parte superior del conjunto de casillas que se comporta mucho como un conjunto de botones de radio. En contraste, más de uno de los más bajos conjunto de casillas de verificación se puede comprobar a la vez, y el "RESET" casilla de verificación puede utilizarse para eliminar los controles de todos a la vez.

Sus comentarios bienvenidos!

 Unit1 unidad; 

interfaz

usos
Windows, Messages, SysUtils, clases, gráficos, controles, formularios, cuadros de diálogo,
Db, StdCtrls, Máscara, DBCtrls, DBTables, ExtCtrls;

tipo

TCheckboxDescriptor = class
/ / Ocultar el comportamiento por defecto de la casilla de verificación en respuesta
/ / A un clic, y simplificar la manipulación de los objetos encapsulados
privado
preClickedState: TCheckBoxState;
GetState función: TCheckBoxState;
procedimiento SetState (Estado: TCheckBoxState);
público
casilla de verificación: TCheckbox;
propiedadEstado: TCheckBoxState leer GetState SetState escribir;
constructor Crear (theCheckbox: TCheckbox);
final;

TCheckboxCollection = class
/ / Asociar una base de datos-consciente cuadro de edición y su valor con una colección
/ / De la casilla de verificación descriptores; comportamiento por defecto se asemeja a los botones de radio
checkboxDescriptors: TList;
handlingClick: Boolean;
privado
función FindSender (Sender: TObject): TCheckboxDescriptor;
GetValue función: string;
procedimiento SetValue (NewValue: string);
público
associatedDBEdit: TDBEdit;
constructor Crear (DBEdit: TDBEdit; theCheckboxes: array de TCheckbox);
Haga clic en el procedimiento (Sender: TObject);
valor de la propiedad: string leer GetValue escribir SetValue;
final;

TPersonalityCBCollection = class (TCheckboxCollection)
/ / Clase derivada que permite más de una casilla que habrán de comprobarse en
/ / Un tiempo, y utiliza una casilla de reposición de los demás
privado
GetValue función: string;
procedimiento SetValue (NewValue: string);
público
valor de la propiedad: string leer GetValue escribir SetValue;
Haga clic en el procedimiento (Sender: TObject);
final;

TForm1 = class (TForm)
Tabla 1: TTable;
DBEdit1: TDBEdit;
DataSource1: TDataSource;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
CheckBox8: TCheckBox;
CheckBoxNA: TCheckBox;
CheckBox9: TCheckBox;
CheckBox10: TCheckBox;
CheckBox11: TCheckBox;
CheckBox12: TCheckBox;
CheckBox13: TCheckBox;
CheckBox14: TCheckBox;
CheckBox15: TCheckBox;
CheckBox16: TCheckBox;
DBNavigator1: TDBNavigator;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Shape1: TShape;
Label4: TLabel;
DBEdit2: TDBEdit;
procedimiento FormCreate (Sender: TObject);
procedimiento CheckBoxNAClick (Sender: TObject);
procedimiento de DBEdit1Change (Sender: TObject);
procedimientoCheckBox9Click (Sender: TObject);
procedimiento DBEdit2Change (Sender: TObject);
privado
SeverityCBs: TCheckboxCollection;
PersonalityCBs: TPersonalityCBCollection;
público
final;

var
Form1: TForm1;

aplicación

($ R *. DFM)

TCheckboxDescriptor.Create constructor (theCheckbox: TCheckbox);
empezar
Crear heredado;
casilla de verificación: = theCheckbox;
/ / Mantener el diseño estado de la casilla de verificación
preClickedState: = theCheckbox.State;
final;

TCheckboxDescriptor.GetState función: TCheckBoxState;
empezar
resultado: = preClickedState;
final;

procedimiento TCheckboxDescriptor.SetState (Estado: TCheckBoxState);
empezar
checkbox.State: = Estado;
preClickedState: = Estado
final;

constructorTCheckboxCollection.Create (DBEdit: TDBEdit; theCheckboxes: array de TCheckbox);
var
i: integer;
empezar
Crear heredado;
associatedDBEdit: = DBEdit;
checkboxDescriptors: = TList.Create;
for i: = 0 a alto (theCheckboxes) hacer
checkboxDescriptors.Add (TCheckboxDescriptor.Create (theCheckboxes [i]));
handlingClick: = false;
final;

funciónTCheckboxCollection.FindSender (Sender: TObject): TCheckboxDescriptor;
var
c: integer;
checkboxDescriptor: TCheckboxDescriptor;
empezar
checkboxDescriptor: = nil;
de c: = 0 a checkboxDescriptors.Count - 1 do begin
checkboxDescriptor: = checkboxDescriptors.Items [c];
si checkboxDescriptor.checkbox = Remitente entonces romper
final;
resultado: = checkboxDescriptor
final;

procedimiento TCheckboxCollection.Click (Sender: TObject);
var
clickedCBDescriptor, oneCBDescriptor: TCheckboxDescriptor;
c: integer;
empezar
si luego la salida handlingClick;
handlingClick: = true;
clickedCBDescriptor: = FindSender (Sender);
si clickedCBDescriptor.State = cbChecked entonces clickedCBDescriptor.State: = cbUnchecked
else begin
clickedCBDescriptor.State: = cbChecked;
de c: = 0 a checkboxDescriptors.Count - 1 do begin
oneCBDescriptor: = checkboxDescriptors.Items [c];
si oneCBDescriptor <> clickedCBDescriptor entonces oneCBDescriptor.State: = cbUnchecked;
final;
final;
associatedDBEdit.DataSource.Edit;
associatedDBEdit.Text: = Valor;
handlingClick: = false;
final;

procedimiento TPersonalityCBCollection.Click (Sender: TObject);
var
clickedCB: TCheckbox;
clickedCBDescriptor, oneCBDescriptor: TCheckboxDescriptor;
c: integer;
empezar
si luego la salida handlingClick;
handlingClick: = true;
clickedCB: = TCheckbox como remitente;
clickedCBDescriptor: = FindSender (Sender);
si clickedCB.Name = 'CheckBox16', y luego
de c: = 0 a checkboxDescriptors. Conde - 1 do begin
oneCBDescriptor: = checkboxDescriptors.Items [c];
oneCBDescriptor.State: = cbUnchecked;
final
otro caso de clickedCBDescriptor.State
cbChecked: clickedCBDescriptor.State: = cbUnchecked;
más clickedCBDescriptor.State: = cbChecked;
final;
associatedDBEdit.DataSource.Edit;
associatedDBEdit.Text: = Valor;
handlingClick: = false;
final;

funciónTPersonalityCBCollection.GetValue: string;
var
c, modulo, resultAsInt: integer;
oneCBDescriptor: TCheckboxDescriptor;
empezar
resultAsInt: = 0;
Modulo: = 1;
de c: = 0 a checkboxDescriptors. Conde - 2 do begin
si c> 0 then modulo: * = Modulo 2;
oneCBDescriptor: = checkboxDescriptors.Items [c];
si oneCBDescriptor.checkbox.State = cbChecked entonces
resultAsInt: = resultAsInt + modulo;
final;
resultado: = IntToStr (resultAsInt)
final;

TCheckboxCollection.GetValue función: string;
var
c: integer;
oneCBDescriptor: TCheckboxDescriptor;
empezar
de c: = 0 a checkboxDescriptors. Conde - 1 do begin
oneCBDescriptor: = checkboxDescriptors.Items [c];
si oneCBDescriptor.checkbox.State = cbChecked entoncesempezar
si oneCBDescriptor.checkbox.Caption = 'N / A' y, a continuación resultado: ='0 '
otro resultado: = oneCBDescriptor.checkbox.Caption;
romper
final
final
final;

procedimiento TPersonalityCBCollection.SetValue (NewValue: string);
var
c, modulo, patrón: integer;
oneCBDescriptor: TCheckboxDescriptor;
empezar
si NewValue =''then salida;
sientonces la salida handlingClick;
handlingClick: = true;
Modulo: = 1;
distribución: = StrToInt (NewValue);
de c: = 0 a checkboxDescriptors. Conde - 1 do begin
si c = 0 entonces modulo: = 1 otro modulo: * = Modulo 2;
oneCBDescriptor: = checkboxDescriptors.Items [c];
if (patrón y modulo) <> 0 then oneCBDescriptor.State: = cbChecked
más oneCBDescriptor.State: = cbUnchecked;
final;
handlingClick: = false;
final;

procedimiento TCheckboxCollection.SetValue (NewValue: string);
var
c: integer;
oneCBDescriptor: TCheckboxDescriptor;
empezar
si NewValue =''then salida;
si luego la salida handlingClick;
handlingClick: = true;
de c: = 0 a checkboxDescriptors. Conde - 1 do begin
oneCBDescriptor: = checkboxDescriptors.Items [c];
oneCBDescriptor.State: = cbUnchecked;
final;
c: = StrToInt (NewValue);
oneCBDescriptor: = checkboxDescriptors.Items [c];
oneCBDescriptor.State: = cbChecked;
handlingClick: = false;
final;

procedimiento TForm1.FormCreate (Sender: TObject);
empezar
SeverityCBs: = TCheckboxCollection. Crear (DBEdit1,
[CheckBoxNA, CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6, CheckBox7, CheckBox8]);
PersonalityCBs: = TPersonalityCBCollection.Create (DBEdit2,
[CheckBox9, CheckBox10, CheckBox11, CheckBox12, CheckBox13, CheckBox14, CheckBox15, CheckBox16]);
Table1.Open
final;

procedimiento TForm1.CheckBoxNAClick (Sender: TObject);
empezar
SeverityCBs.Click (Sender);
final;

procedimiento TForm1.DBEdit1Change (Sender: TObject);
empezar
SeverityCBs.SetValue (DBEdit1.Text)
final;

procedimientoTForm1.CheckBox9Click (Sender: TObject);
empezar
PersonalityCBs.Click (Sender);
final;

procedimiento TForm1.DBEdit2Change (Sender: TObject);
empezar
PersonalityCBs.SetValue (DBEdit2.Text)
final;

final.

Average rating: