
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6877 8e941d3f-bd1b-0410-a28a-d453659cc2b4
392 lines
11 KiB
ObjectPascal
392 lines
11 KiB
ObjectPascal
{******************************************************************
|
|
|
|
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.delphi-jedi.org
|
|
|
|
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 JvComboListBoxDemoForm;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
//Windows, Messages,
|
|
SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls,
|
|
//JvComponent, JvClipboardViewer,
|
|
ExtCtrls, ExtDlgs,
|
|
ComCtrls, Menus, JvComboListBox;
|
|
//, JvExForms;
|
|
|
|
type
|
|
|
|
{ TJvComboListBoxDemoFrm }
|
|
|
|
TJvComboListBoxDemoFrm = class(TForm)
|
|
// JvClipboardViewer1: TJvClipboardViewer;
|
|
Splitter1: TSplitter;
|
|
Panel1: TPanel;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
Label3: TLabel;
|
|
Label4: TLabel;
|
|
Memo1: TMemo;
|
|
pnlImage: TPanel;
|
|
Image1: TImage;
|
|
btnLoadImage: TButton;
|
|
btnCopyImage: TButton;
|
|
btnCopyText: TButton;
|
|
edItemHeight: TEdit;
|
|
udItemHeight: TUpDown;
|
|
cbDrawStyle: TComboBox;
|
|
edButtonWidth: TEdit;
|
|
udButtonWidth: TUpDown;
|
|
btnLoadText: TButton;
|
|
OpenPictureDialog1: TOpenPictureDialog;
|
|
PopupMenu1: TPopupMenu;
|
|
mnuPaste: TMenuItem;
|
|
mnuDelete: TMenuItem;
|
|
N1: TMenuItem;
|
|
mnuOriginal: TMenuItem;
|
|
mnuStretch: TMenuItem;
|
|
mnuProportional: TMenuItem;
|
|
OpenDialog1: TOpenDialog;
|
|
chkHotTrackCombo: TCheckBox;
|
|
edColumns: TEdit;
|
|
Label5: TLabel;
|
|
udColumns: TUpDown;
|
|
chkInsert: TCheckBox;
|
|
cbPopupAlign: TComboBox;
|
|
Label6: TLabel;
|
|
chkCustomDrop: TCheckBox;
|
|
chkIncludeFiles: TCheckBox;
|
|
{
|
|
procedure JvClipboardViewer1Image(Sender: TObject; Image: TBitmap);
|
|
procedure JvClipboardViewer1Text(Sender: TObject; Text: string);
|
|
}
|
|
procedure btnCopyTextClick(Sender: TObject);
|
|
procedure btnCopyImageClick(Sender: TObject);
|
|
procedure btnLoadImageClick(Sender: TObject);
|
|
procedure Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
procedure udItemHeightClick(Sender: TObject; Button: TUDBtnType);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure mnuPasteClick(Sender: TObject);
|
|
procedure mnuDeleteClick(Sender: TObject);
|
|
procedure cbDrawStyleChange(Sender: TObject);
|
|
procedure mnuProportionalClick(Sender: TObject);
|
|
procedure PopupMenu1Popup(Sender: TObject);
|
|
procedure udButtonWidthClick(Sender: TObject; Button: TUDBtnType);
|
|
procedure btnLoadTextClick(Sender: TObject);
|
|
procedure chkHotTrackComboClick(Sender: TObject);
|
|
procedure udColumnsClick(Sender: TObject; Button: TUDBtnType);
|
|
procedure cbPopupAlignChange(Sender: TObject);
|
|
procedure chkIncludeFilesClick(Sender: TObject);
|
|
private
|
|
LB: TJvComboListBox;
|
|
procedure DoDropDown(Sender: TObject; AIndex, X, Y: integer; var AllowDrop:boolean);
|
|
procedure DoAccept(Sender: TObject; Index: integer; const Value: string);
|
|
public
|
|
procedure UpdateFromClipboardText;
|
|
procedure UpdateFromClipboardImage;
|
|
end;
|
|
|
|
var
|
|
JvComboListBoxDemoFrm: TJvComboListBoxDemoFrm;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Math, Clipbrd, DropFrm;
|
|
|
|
{$R *.lfm}
|
|
|
|
function Max(Values: array of integer): integer;
|
|
var
|
|
i: integer;
|
|
begin
|
|
Result := Values[Low(Values)];
|
|
for i := Low(Values) + 1 to High(Values) do
|
|
if Values[i] > Result then
|
|
Result := Values[i];
|
|
end;
|
|
|
|
(*
|
|
procedure TJvComboListBoxDemoFrm.JvClipboardViewer1Image(Sender: TObject; Image: TBitmap);
|
|
var
|
|
P: TPicture;
|
|
begin
|
|
P := TPicture.Create;
|
|
try
|
|
P.Assign(Image);
|
|
if chkInsert.Checked then
|
|
LB.InsertImage(0, P)
|
|
else
|
|
LB.AddImage(P);
|
|
finally
|
|
P.Free; // AddImage creates a copy, so we can free this instance
|
|
end;
|
|
// LB.ItemHeight := Max(LB.ItemHeight, B.Height + 8);
|
|
udItemHeight.Position := LB.ItemHeight;
|
|
Caption := Format('Count: %d', [LB.Items.Count]);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.JvClipboardViewer1Text(Sender: TObject; Text: string);
|
|
begin
|
|
if chkInsert.Checked then
|
|
LB.InsertText(0, StringReplace(Text, #13#10, ' ', [rfReplaceAll]))
|
|
else
|
|
LB.AddText(StringReplace(Text, #13#10, ' ', [rfReplaceAll]));
|
|
Caption := Format('Clipboard count: %d', [LB.Items.Count]);
|
|
end;
|
|
*)
|
|
|
|
procedure TJvComboListboxDemoFrm.UpdateFromClipboardText;
|
|
var
|
|
txt: String;
|
|
begin
|
|
txt := Clipboard.AsText;
|
|
if chkInsert.Checked then
|
|
LB.InsertText(0, StringReplace(txt, LineEnding, ' ', [rfReplaceAll]))
|
|
else
|
|
LB.AddText(StringReplace(txt, LineEnding, ' ', [rfReplaceAll]));
|
|
Caption := Format('Clipboard count: %d', [LB.Items.Count]);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.UpdateFromClipboardImage;
|
|
var
|
|
P: TPicture;
|
|
begin
|
|
P := TPicture.Create;
|
|
try
|
|
P.LoadFromClipboardFormat(CF_BITMAP);
|
|
if chkInsert.Checked then
|
|
LB.InsertImage(0, P)
|
|
else
|
|
LB.AddImage(P);
|
|
finally
|
|
P.Free; // AddImage creates a copy, so we can free this instance
|
|
end;
|
|
udItemHeight.Position := LB.ItemHeight;
|
|
Caption := Format('Clipboard count: %d', [LB.Items.Count]);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.btnCopyTextClick(Sender: TObject);
|
|
begin
|
|
if Memo1.SelLength = 0 then
|
|
Memo1.SelectAll;
|
|
Memo1.CopyToClipboard;
|
|
UpdateFromClipboardText;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.btnCopyImageClick(Sender: TObject);
|
|
var
|
|
// AFormat: Word;
|
|
// AData: Cardinal;
|
|
// APalette: HPALETTE;
|
|
il: TImageList;
|
|
begin
|
|
(*
|
|
if Image1.Picture.Graphic is TIcon then
|
|
begin
|
|
// convert ico to bmp
|
|
il := TImageList.CreateSize(Image1.Picture.Width, Image1.Picture.Height);
|
|
try
|
|
il.AddIcon(Image1.Picture.Icon);
|
|
il.GetBitmap(0, Image1.Picture.Bitmap);
|
|
finally
|
|
il.Free;
|
|
end;
|
|
end;
|
|
*)
|
|
Image1.Picture.SaveToClipboardFormat(CF_BITMAP);
|
|
UpdateFromClipboardImage;
|
|
|
|
{ original:
|
|
Image1.Picture.SaveToClipboardFormat(AFormat, AData, APalette);
|
|
Clipboard.SetAsHandle(AFormat, AData);
|
|
}
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.btnLoadImageClick(Sender: TObject);
|
|
begin
|
|
if OpenPictureDialog1.Execute then
|
|
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.Memo1KeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
begin
|
|
if (ssCtrl in Shift) then begin
|
|
if (Key = ord('C')) or (Key = ord('c')) then begin
|
|
Memo1.CopyToClipboard;
|
|
JvComboListboxDemoFrm.UpdateFromClipboardText;
|
|
end else
|
|
if (Key = ord('X')) or (Key = ord('x')) then begin
|
|
Memo1.CutToClipboard;
|
|
JvComboListboxDemoFrm.UpdateFromClipboardText;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.udItemHeightClick(Sender: TObject; Button: TUDBtnType);
|
|
begin
|
|
LB.ItemHeight := udItemHeight.Position;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.DoAccept(Sender:TObject;Index:integer; const Value:string);
|
|
begin
|
|
if Index < 0 then Index := LB.ItemIndex;
|
|
if Index >= 0 then
|
|
begin
|
|
LB.Items.Objects[Index].Free;
|
|
LB.Items.Objects[Index] := nil;
|
|
LB.Items[Index] := Value;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.DoDropDown(Sender: TObject; AIndex, X,Y:integer;
|
|
var AllowDrop:boolean);
|
|
var
|
|
R:TRect;
|
|
P:TPoint;
|
|
begin
|
|
AllowDrop := not chkCustomDrop.Checked;
|
|
|
|
mnuOriginal.Enabled := Lb.Items.Objects[AIndex] <> nil;
|
|
mnuStretch.enabled := LB.Items.Objects[AIndex] <> nil;
|
|
mnuProportional.Enabled := LB.Items.Objects[AIndex] <> nil;
|
|
|
|
if not AllowDrop then
|
|
begin
|
|
R := LB.ItemRect(AIndex);
|
|
P := LB.ClientToScreen(Point(R.Right, R.Top));
|
|
if frmDrop = nil then
|
|
frmDrop := TfrmDrop.Create(Application);
|
|
with frmDrop do
|
|
begin
|
|
IncludeFiles := chkIncludeFiles.Checked;
|
|
Top := P.Y + LB.ItemHeight;
|
|
Left := P.X - Width;
|
|
// notify dialog when the user clicks outside the form
|
|
OnAccept := @DoAccept;
|
|
Show;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.FormCreate(Sender: TObject);
|
|
begin
|
|
LB := TJvComboListBox.Create(Self);
|
|
LB.Align := alClient;
|
|
LB.Width := 200;
|
|
LB.Parent := Self;
|
|
LB.DropDownMenu := PopupMenu1;
|
|
LB.OnDropDown := @DoDropDown;
|
|
// LB.ScrollBars := ssBoth;
|
|
// LB.HotTrack := true;
|
|
Splitter1.Left := LB.Left - 10;
|
|
cbDrawStyle.ItemIndex := Ord(LB.DrawStyle);
|
|
cbPopupAlign.ItemIndex := Ord(PopupMenu1.Alignment);
|
|
LB.ItemHeight := udItemHeight.Position;
|
|
udButtonWidth.Position := LB.ButtonWidth;
|
|
udColumns.Position := LB.Columns;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.mnuPasteClick(Sender: TObject);
|
|
begin
|
|
with LB do
|
|
begin
|
|
if Items.Objects[ItemIndex] <> nil then
|
|
Image1.Picture.Assign(TPicture(Items.Objects[ItemIndex]))
|
|
else
|
|
Memo1.Lines.Text := Items[ItemIndex];
|
|
end;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.mnuDeleteClick(Sender: TObject);
|
|
begin
|
|
with LB do
|
|
if ItemIndex >= 0 then
|
|
Delete(ItemIndex);
|
|
Caption := Format('Clipboard count: %d', [LB.Items.Count]);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.cbDrawStyleChange(Sender: TObject);
|
|
begin
|
|
LB.DrawStyle := TJvComboListBoxDrawStyle(cbDrawStyle.ItemIndex);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.mnuProportionalClick(Sender: TObject);
|
|
begin
|
|
cbDrawStyle.ItemIndex := (Sender as TMenuItem).Tag;
|
|
LB.DrawStyle := TJvComboListBoxDrawStyle(cbDrawStyle.ItemIndex);
|
|
(Sender as TMenuItem).Checked := true;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.PopupMenu1Popup(Sender: TObject);
|
|
var
|
|
i: integer;
|
|
begin
|
|
for i := 0 to PopupMenu1.Items.Count - 1 do
|
|
if PopupMenu1.Items[i].GroupIndex = 1 then
|
|
PopupMenu1.Items[i].Checked := PopupMenu1.Items[i].Tag = cbDrawStyle.ItemIndex;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.udButtonWidthClick(Sender: TObject; Button: TUDBtnType);
|
|
begin
|
|
LB.ButtonWidth := udButtonWidth.Position;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.btnLoadTextClick(Sender: TObject);
|
|
begin
|
|
if OpenDialog1.Execute then
|
|
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.chkHotTrackComboClick(Sender: TObject);
|
|
begin
|
|
LB.HotTrackCombo := chkHotTrackCombo.Checked;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.udColumnsClick(Sender: TObject; Button: TUDBtnType);
|
|
begin
|
|
LB.Columns := udColumns.Position;
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.cbPopupAlignChange(Sender: TObject);
|
|
begin
|
|
PopupMenu1.Alignment := TPopupAlignment(cbPopupAlign.ItemIndex);
|
|
end;
|
|
|
|
procedure TJvComboListBoxDemoFrm.chkIncludeFilesClick(Sender: TObject);
|
|
begin
|
|
if frmDrop <> nil then //recreate form
|
|
begin
|
|
frmDrop.Release;
|
|
frmDrop := nil;
|
|
end;
|
|
end;
|
|
|
|
end.
|