Articles   Members Online:
-Article/Tip Search
-News Group Search over 21 Million news group articles.
-Delphi/Pascal
-CBuilder/C++
-C#Builder/C#
-JBuilder/Java
-Kylix
Member Area
-Home
-Account Center
-Top 10 NEW!!
-Submit Article/Tip
-Forums Upgraded!!
-My Articles
-Edit Information
-Login/Logout
-Become a Member
-Why sign up!
-Newsletter
-Chat Online!
-Indexes NEW!!
Employment
-Build your resume
-Find a job
-Post a job
-Resume Search
Contacts
-Contacts
-Feedbacks
-Link to us
-Privacy/Disclaimer
Embarcadero
Visit Embarcadero
Embarcadero Community
JEDI
Links
How to limit the number of characters per line and the number of lines in a TMem Turn on/off line numbers in source code. Switch to Orginial background IDE or DSP color Comment or reply to this aritlce/tip for discussion. Bookmark this article to my favorite article(s). Print this article
12-Oct-02
Category
Reporting /Printing
Language
Delphi 2.x
Views
126
User Rating
No Votes
# Votes
0
Replies
0
Publisher:
DSP, Administrator
Reference URL:
DKB
			Author: Jonas Bilinkevicius

Is there any way to control the amount of characters per line in a TMemo component, 
e.g. that I can only store 7 lines of 50 chars each. The MaxLength property does 
not help in this case as it controls the total number of characters in the control.

Answer:

Limiting a memo to 6 lines of input:
1   
2   procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
3   var
4     line: Integer;
5   begin
6     if key = #13 then
7     begin
8       with Sender as TMemo do
9       begin
10        if lines.count >= 6 then
11        begin
12          key := #0;
13          line := Perform(EM_LINEFROMCHAR, SelStart, 0);
14          if line < 5 then
15            SelStart := Perform(EM_LINEINDEX, line + 1, 0);
16        end;
17      end;
18    end;
19  end;
20  
21  //Limiting a memo to 5 lines of input of max. 25 characters each:
22  
23  procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
24  var
25    line, col: Integer;
26  begin
27    with Sender as TMemo do
28    begin
29      line := Perform(EM_LINEFROMCHAR, SelStart, 0);
30      col := SelStart - Perform(EM_LINEINDEX, line, 0);
31      if key = #8 then
32      begin
33        { Do not allow backspace if caret is on first column and deleting the 
34  			linebreak of the line in front would result in a line of more than 25
35  			characters. Inconvenient for the user but specs are specs... }
36        if (col = 0) and (line > 0) then
37        begin
38          if (Length(lines[line]) + Length(lines[line - 1])) > 25 then
39            Key := #0;
40        end;
41      end
42      else if key in [#13, #10] then
43      begin
44        { Handle hard linebreaks via Enter or Ctrl-Enter }
45        if lines.count >= 5 then
46        begin
47          { Max number of lines reached or exceeded, set caret to start of next 
48  				line or this line, if on the last }
49          key := #0;
50          if line = 4 then
51            SelStart := Perform(EM_LINEINDEX, line, 0)
52          else
53            SelStart := Perform(EM_LINEINDEX, line + 1, 0);
54        end;
55      end
56      else if Key >= ' ' then
57      begin
58        { Do swallow key if current line has reached limit. }
59        if Length(lines[line]) >= 25 then
60          Key := #0;
61      end;
62    end;
63    if Key = #0 then
64      Beep;
65  end;
66  
67  procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
68  var
69    line, col: Integer;
70  begin
71    if Key = VK_DELETE then
72      with Sender as TMemo do
73      begin
74        line := Perform(EM_LINEFROMCHAR, SelStart, 0);
75        col := SelStart - Perform(EM_LINEINDEX, line, 0);
76        if col = Length(lines[line]) then
77          if (line < 4) and ((Length(lines[line]) + Length(lines[line + 1])) > 25) 
78  then
79          begin
80            key := 0;
81            Beep
82          end;
83      end;
84  end;


			
Vote: How useful do you find this Article/Tip?
Bad Excellent
1 2 3 4 5 6 7 8 9 10

 

Advertisement
Share this page
Advertisement
Download from Google

Copyright © Mendozi Enterprises LLC