You've already forked lazarus-ccr
jvcllaz: Add new component TComboListBox.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6864 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -0,0 +1,390 @@
|
||||
{******************************************************************
|
||||
|
||||
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;
|
||||
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.
|
Reference in New Issue
Block a user