282 lines
8.5 KiB
ObjectPascal
282 lines
8.5 KiB
ObjectPascal
{******************************************************************************}
|
|
{* WARNING: JEDI VCL To CLX Converter generated unit. *}
|
|
{* Manual modifications will be lost on next release. *}
|
|
{******************************************************************************}
|
|
|
|
{******************************************************************
|
|
|
|
JEDI-VCL Demo
|
|
|
|
Copyright (C) 2002 Project JEDI
|
|
|
|
Original author:
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the JEDI-JVCL
|
|
home page, located at http://jvcl.sourceforge.net
|
|
|
|
The contents of this file are used with permission, subject to
|
|
the Mozilla Public License Version 1.1 (the "License"); you may
|
|
not use this file except in compliance with the License. You may
|
|
obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1_1Final.html
|
|
|
|
Software distributed under the License is distributed on an
|
|
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
implied. See the License for the specific language governing
|
|
rights and limitations under the License.
|
|
|
|
******************************************************************}
|
|
|
|
unit MainFrm;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
QWindows, QMessages, SysUtils, Classes, Types, QGraphics, QControls, QForms,
|
|
QDialogs, QStdCtrls, QExtCtrls, QImgList, QComCtrls,
|
|
JvQComponent, JvQErrorIndicator, JvQExControls, JvQImageSquare,
|
|
QComCtrlsEx;
|
|
|
|
type
|
|
// Example of a control that implements the IJvErrorIndicatorClient interface
|
|
TJvErrorClientEdit = class(TEdit, IUnknown, IJvErrorIndicatorClient)
|
|
private
|
|
FErrorMessage: WideString;
|
|
FErrorIndicator: IJvErrorIndicator;
|
|
{ IJvErrorIndicatorClient}
|
|
procedure UpdateProvider;
|
|
procedure ClearProvider;
|
|
protected
|
|
procedure setErrorIndicator(const Value: IJvErrorIndicator); virtual;
|
|
function getErrorIndicator: IJvErrorIndicator; virtual;
|
|
function getControl: TControl; virtual;
|
|
procedure setErrorMessage(const Value: WideString); virtual;
|
|
function getErrorMessage: WideString; virtual;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
public
|
|
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
|
|
published
|
|
property ErrorIndicator: IJvErrorIndicator read getErrorIndicator write setErrorIndicator;
|
|
property ErrorMessage: WideString read getErrorMessage write setErrorMessage;
|
|
end;
|
|
|
|
TfrmErrIndicatorDemo = class(TForm)
|
|
btnClearErrors: TButton;
|
|
memDescription: TMemo;
|
|
il16: TImageList;
|
|
btnShowErrors: TButton;
|
|
gbOptions: TGroupBox;
|
|
Label1: TLabel;
|
|
cbImageAlignment: TComboBox;
|
|
Label2: TLabel;
|
|
edImagePadding: TEdit;
|
|
udImagePadding: TUpDown;
|
|
Label3: TLabel;
|
|
cbBlinkStyle: TComboBox;
|
|
Label4: TLabel;
|
|
edBlinkRate: TEdit;
|
|
udBlinkRate: TUpDown;
|
|
btnUpdate: TButton;
|
|
Label5: TLabel;
|
|
edImageIndex: TEdit;
|
|
udImageIndex: TUpDown;
|
|
isPreview: TJvImageSquare;
|
|
chkAutoScroll: TCheckBox;
|
|
il32: TImageList;
|
|
chkLarge: TCheckBox;
|
|
lblClient: TLabel;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure btnClearErrorsClick(Sender: TObject);
|
|
procedure btnShowErrorsClick(Sender: TObject);
|
|
procedure btnUpdateClick(Sender: TObject);
|
|
procedure udImageIndexClick(Sender: TObject; Button: TUDBtnType);
|
|
procedure chkAutoScrollClick(Sender: TObject);
|
|
procedure chkLargeClick(Sender: TObject);
|
|
private
|
|
jep: TJvErrorIndicator;
|
|
edClient: TJvErrorClientEdit;
|
|
procedure DoClientKey(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
public
|
|
end;
|
|
|
|
var
|
|
frmErrIndicatorDemo: TfrmErrIndicatorDemo;
|
|
|
|
implementation
|
|
|
|
uses
|
|
JvQEdit;
|
|
|
|
{$R *.xfm}
|
|
|
|
procedure TfrmErrIndicatorDemo .FormCreate(Sender: TObject);
|
|
begin
|
|
cbImageAlignment.ItemIndex := 3;
|
|
cbBlinkStyle.ItemIndex := 1;
|
|
|
|
jep := TJvErrorIndicator.Create(Self);
|
|
jep.Images := il16;
|
|
isPreview.Images := TImageList(jep.Images);
|
|
jep.ImageIndex := udImageIndex.Position;
|
|
isPreview.ImageIndex := udImageIndex.Position;
|
|
udImageIndex.Max := jep.Images.Count - 1;
|
|
|
|
// Create an edit dynamically that implements the IJvErrorIndicatorClient interface
|
|
// For this demo, hitting RETURN will display it's Text as an error message
|
|
edClient := TJvErrorClientEdit.Create(Self);
|
|
edClient.Parent := Self;
|
|
edClient.SetBounds(lblClient.Left, lblClient.Top + lblClient.Height + 4,
|
|
edClient.Width, edClient.Height);
|
|
edClient.Name := 'JvErrorClientEdit1';
|
|
edClient.ErrorIndicator := jep;
|
|
edClient.TabOrder := 2;
|
|
edClient.Text := 'Type and hit RETURN to show this text as an error message';
|
|
edClient.OnKeyUp := DoClientKey;
|
|
memDescription.WordWrap := true;
|
|
end;
|
|
|
|
procedure TfrmErrIndicatorDemo .DoClientKey(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
begin
|
|
if Key = VK_RETURN then
|
|
begin
|
|
// you must set both ErrorIndicator <> nil and ErrorMessage <> '' to trigger the ErrorIndicator:
|
|
if edClient.Text = '' then
|
|
edClient.ErrorMessage := 'Please supply a value!'
|
|
else
|
|
edClient.ErrorMessage := 'You typed: "' + edClient.Text + '"';
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmErrIndicatorDemo .btnClearErrorsClick(Sender: TObject);
|
|
begin
|
|
jep.ClearErrors;
|
|
end;
|
|
|
|
procedure TfrmErrIndicatorDemo .btnShowErrorsClick(Sender: TObject);
|
|
var
|
|
i: integer;
|
|
begin
|
|
jep.BeginUpdate; // suspend blinking until all controls have been updated
|
|
// update any previous controls
|
|
btnUpdate.Click;
|
|
// only show error icons for wincontrols since the form gets crowded anyway...
|
|
for i := 0 to ComponentCount - 1 do
|
|
if (Components[i] is TWinControl)
|
|
// avoid duplicate icons for the edit/updown combos:
|
|
and (not (Components[i] is TEdit) or (Components[i] is TJvErrorClientEdit)) then
|
|
jep.Error[TWinControl(Components[i])] := Format('Example error message for %s',
|
|
[TWinControl(Components[i]).Name]);
|
|
// update any option changes
|
|
btnUpdate.Click;
|
|
jep.EndUpdate; // restart blinking
|
|
end;
|
|
|
|
procedure TfrmErrIndicatorDemo .btnUpdateClick(Sender: TObject);
|
|
begin
|
|
jep.ImageAlignment[nil] := TJvErrorImageAlignment(cbImageAlignment.ItemIndex);
|
|
jep.ImagePadding[nil] := udImagePadding.Position;
|
|
jep.BlinkStyle := TJvErrorBlinkStyle(cbBlinkStyle.ItemIndex);
|
|
jep.BlinkRate := udBlinkRate.Position;
|
|
jep.ImageIndex := udImageIndex.Position;
|
|
end;
|
|
|
|
procedure TfrmErrIndicatorDemo .udImageIndexClick(Sender: TObject; Button: TUDBtnType);
|
|
begin
|
|
isPreview.ImageIndex := udImageIndex.Position;
|
|
end;
|
|
|
|
procedure TfrmErrIndicatorDemo .chkAutoScrollClick(Sender: TObject);
|
|
begin
|
|
AutoScroll := chkAutoScroll.Checked;
|
|
end;
|
|
|
|
procedure TfrmErrIndicatorDemo .chkLargeClick(Sender: TObject);
|
|
begin
|
|
if chkLarge.Checked then
|
|
jep.Images := il32
|
|
else
|
|
jep.Images := il16;
|
|
isPreview.Images := TImageList(jep.Images);
|
|
udImageIndex.Max := jep.Images.Count - 1;
|
|
end;
|
|
|
|
{ TJvErrorClientEdit }
|
|
|
|
procedure TJvErrorClientEdit.ClearProvider;
|
|
var
|
|
tmp: string;
|
|
begin
|
|
if (FErrorIndicator <> nil) and not (csFreeNotification in ComponentState) then
|
|
begin
|
|
tmp := FErrorMessage;
|
|
FErrorMessage := '';
|
|
FErrorIndicator.SetClientError(Self);
|
|
FErrorMessage := tmp;
|
|
end;
|
|
end;
|
|
|
|
function TJvErrorClientEdit.getControl: TControl;
|
|
begin
|
|
Result := Self;
|
|
end;
|
|
|
|
function TJvErrorClientEdit.getErrorMessage: WideString;
|
|
begin
|
|
Result := FErrorMessage;
|
|
end;
|
|
|
|
function TJvErrorClientEdit.getErrorIndicator: IJvErrorIndicator;
|
|
begin
|
|
Result := FErrorIndicator;
|
|
end;
|
|
|
|
procedure TJvErrorClientEdit.Notification(AComponent: TComponent;
|
|
Operation: TOperation);
|
|
begin
|
|
inherited;
|
|
if Operation = opRemove then
|
|
begin
|
|
if (Assigned(ErrorIndicator)) and (AComponent.IsImplementorOf(ErrorIndicator)) then
|
|
ErrorIndicator := nil;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvErrorClientEdit.SetBounds(ALeft, ATop, AWidth,
|
|
AHeight: Integer);
|
|
begin
|
|
inherited;
|
|
ClearProvider;
|
|
UpdateProvider;
|
|
end;
|
|
|
|
procedure TJvErrorClientEdit.setErrorMessage(const Value: WideString);
|
|
begin
|
|
FErrorMessage := Value;
|
|
UpdateProvider;
|
|
end;
|
|
|
|
procedure TJvErrorClientEdit.setErrorIndicator(const Value: IJvErrorIndicator);
|
|
begin
|
|
ClearProvider;
|
|
ReferenceInterface(FErrorIndicator, opRemove);
|
|
FErrorIndicator := Value;
|
|
ReferenceInterface(FErrorIndicator, opInsert);
|
|
UpdateProvider;
|
|
end;
|
|
|
|
|
|
|
|
procedure TJvErrorClientEdit.UpdateProvider;
|
|
begin
|
|
if (FErrorIndicator <> nil) then
|
|
FErrorIndicator.SetClientError(Self);
|
|
end;
|
|
|
|
end.
|
|
|