summaryrefslogtreecommitdiff
path: root/tools/iceit/utils.pas
diff options
context:
space:
mode:
Diffstat (limited to 'tools/iceit/utils.pas')
-rw-r--r--tools/iceit/utils.pas66
1 files changed, 66 insertions, 0 deletions
diff --git a/tools/iceit/utils.pas b/tools/iceit/utils.pas
new file mode 100644
index 0000000000..7d1cceeab8
--- /dev/null
+++ b/tools/iceit/utils.pas
@@ -0,0 +1,66 @@
+unit utils;
+
+interface
+
+uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
+
+ function GetValue(S: String; H: Integer): String;
+ function SetValue(S: String; H: Integer; Value: String): String;
+ function SetWidth(Canvas: TCanvas; S: String; n: Integer): String;
+
+implementation
+
+//--------------------------------------------------------------------------------------
+// Функция возвращает текст из строки S содержащийся между символами '|' на позиции H
+//--------------------------------------------------------------------------------------
+function GetValue(S: String; H: Integer): String;
+var F, n: Integer;
+begin
+ F := 0;
+ Result := '';
+ for n := 1 to Length(S) do
+ begin
+ if S[n] = '|' then inc(F);
+ if (S[n] <> '|') and (F = H) then Result := Result + S[n]
+ end;
+end;
+
+//--------------------------------------------------------------------------------------
+// Функция возвращает строку аналогичную S, но с замененным между
+// символами '|' на позиции H текстом на значение Value
+//--------------------------------------------------------------------------------------
+function SetValue(S: String; H: Integer; Value: String): String;
+var F, n: Integer;
+begin
+ n := 1;
+ F := 0;
+ Result := '';
+ while (n < Length(S)) and (F < H) do
+ begin
+ if S[n] = '|' then inc(F);
+ Result := Result + S[n];
+ inc(n);
+ end;
+ Result := Result + Value;
+ while S[n] <> '|' do inc(n);
+ while (n <= Length(S)) do
+ begin
+ Result := Result + S[n];
+ inc(n);
+ end;
+end;
+
+//--------------------------------------------------------------------------------------
+// Функция возвращает S если ширина строки < n,
+// или S с многоточием '...' урезанную до ширины n
+//--------------------------------------------------------------------------------------
+function SetWidth(Canvas: TCanvas; S: String; n: Integer): String;
+begin
+ if Canvas.TextWidth(S) > n then
+ begin
+ while Canvas.TextWidth(S + '...') > n do SetLength(S, Length(S)-1);
+ Result := S + '...';
+ end else Result := S;
+end;
+
+end.