From 7bf24c3d0bfd02bc65ecd1a973e4688e72d1bec7 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 19 Jun 2022 20:10:47 +0000 Subject: [PATCH] Industrial/LCDDisplay: Single-character input of new character name in CharDefs editor. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8317 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../source/indlcddisplay_editorform.pas | 72 ++++++++++++++----- 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/components/industrialstuff/source/indlcddisplay_editorform.pas b/components/industrialstuff/source/indlcddisplay_editorform.pas index 9122a979c..f1ec71b80 100644 --- a/components/industrialstuff/source/indlcddisplay_editorform.pas +++ b/components/industrialstuff/source/indlcddisplay_editorform.pas @@ -29,7 +29,7 @@ type procedure btReplaceClick(Sender: TObject); procedure cbCharSelectorChange(Sender: TObject); procedure dgDotMatrixKeyDown(Sender: TObject; var Key: Word; - Shift: TShiftState); + {%H-}Shift: TShiftState); procedure dgDotMatrixMouseDown(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); procedure dgDotMatrixMouseMove(Sender: TObject; Shift: TShiftState; X, @@ -70,8 +70,61 @@ implementation {$R *.lfm} uses - Math; + Math, ButtonPanel; +function CharInputBox(const ACaption, APrompt, ADefault: string): string; +var + F: TForm; + ed: TEdit; + lbl: TLabel; + bp: TButtonPanel; +begin + F := TForm.CreateNew(nil); + try + F.Caption := ACaption; + F.BorderStyle := bsDialog; + lbl := TLabel.Create(F); + lbl.AnchorSideTop.Control := F; + lbl.AnchorSideLeft.Control := F; + lbl.BorderSpacing.Top := F.Scale96ToFont(12); + lbl.BorderSpacing.Bottom := F.Scale96ToFont(2); + lbl.BorderSpacing.Left := F.Scale96ToFont(12); + lbl.BorderSpacing.Right := F.Scale96ToFont(12); + lbl.WordWrap := true; + lbl.AutoSize := true; + lbl.Caption := APrompt; + lbl.Parent := F; + lbl.AdjustSize; + ed := TEdit.Create(F); + ed.AnchorSideTop.Control := lbl; + ed.AnchorSideTop.Side := asrBottom; + ed.AnchorSideLeft.Control := F; + ed.AnchorSideRight.Control := F; + ed.AnchorSideRight.Side := asrRight; + ed.Anchors := [akLeft, akTop, akRight]; + ed.BorderSpacing.Left := F.Scale96ToFont(12); + ed.BorderSpacing.Right := F.Scale96ToFont(12); + ed.BorderSpacing.Bottom := F.Scale96ToFont(18); + ed.MaxLength := 1; + ed.Text := ADefault; + ed.Parent := F; + ed.AdjustSize; + bp := TButtonPanel.Create(F); + bp.ShowButtons := [pbOK, pbCancel]; + bp.Parent := F; + bp.AdjustSize; + F.Constraints.MinHeight := ed.Top + ed.Height + ed.BorderSpacing.Bottom + bp.Height + 2*bp.BorderSpacing.Around; + F.AutoSize := true; + F.Position := poScreenCenter; + if F.ShowModal = mrOK then + Result := ed.Text + else + Result := ADefault; + finally + F.Free; + end; +end; + procedure TLCDCharDefsEditor.PopulateCharSelector; var i: integer; @@ -100,21 +153,8 @@ end; procedure TLCDCharDefsEditor.btAddClick(Sender: TObject); var newChar: String; - perc, pix: Integer; begin - // Query the name of the new character from an input box. Unfortunately, the - // width of the input box is too wide. We work around this by temporarily - // setting the global parameter cInputQueryEditSizePercents to 0 - perc := cInputQueryEditSizePercents; - pix := cInputQueryEditSizePixels; - cInputQueryEditSizePercents := 0; - cInputQueryEditSizePixels := 200; - try - newChar := InputBox('Dotmatrix to be used for...', 'Character', ''); - finally - cInputQueryEditSizePercents := perc; - cInputQueryEditSizePixels := pix; - end; + newChar := CharInputBox('Dot matrix for...', 'Character', ''); if newChar = '' then exit;