Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Пара простых вопросов...   Найти похожие ветки 

 
Max.66RUS ©   (2006-10-27 20:53) [0]

1) Как можно сделать такую опцию, чтобы в Edit1.Text с клавиатуры вводились только цифры, а попытка ввода других символов игнорировалась.

2) Подскажите процедуру сохранения содержимого Edit1.Text в текстовый файл по нажатию на копку, с возможностью выбрать нужный каталог и ввести нужное имя файла.

Заранее спасибо.


 
Ketmar ©   (2006-10-27 21:14) [1]

оффтоп: тебя спасает только правильный выбор конференции... %-)


 
Джо ©   (2006-10-27 21:20) [2]

1)
procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key in ["0".."9"]) then
   Key := #0
end;

Не спасет от вставки из буфера обмена.

2)
На форму положи компонент TSaveDialog со вкладки Dialogs.
procedure TMainForm.Button1Click(Sender: TObject);
var
 F: TextFile;
begin
 if SaveDialog1.Execute then
 begin
   AssignFile (F,SaveDialog1.FileName);
   Rewrite (F);
   try
     WriteLn (F,Edit1.Text)
   finally
     CloseFile (F);
   end;
 end;
end;


 
Gero ©   (2006-10-27 21:25) [3]

Вот, писал когда-то. Если сможешь заюзать, все будет, и проверка при вставке, и контроль максимального значения, даже подсказка будет показываться, когда не то нажимаешь.


interface

const
 MaxInt64    =  9223372036854775807;
 MaxInt64Str = "9223372036854775807";

TDMCEdit = class(TEdit)
 private
   FNumberStyle: Boolean;
   FMaxValue: Int64;
   procedure SetNumberStyle(const Value: Boolean);
   function GetValue: Int64;
   procedure SetValue(const Value: Int64);
   procedure SetMaxValue(const Value: Int64);

   procedure WMPaste(var Msg: TMessage); message WM_PASTE;
 protected
   procedure Change; override;
 public
   constructor Create(AOwner: TComponent); override;
 published
   property NumberStyle: Boolean read FNumberStyle write SetNumberStyle;
   property Value: Int64 read GetValue write SetValue;
   property MaxValue: Int64 read FMaxValue write SetMaxValue;
 end;
 TEdit = class(TDMCEdit);

implemenatation

constructor TDMCEdit.Create(AOwner: TComponent);
begin
 inherited;
 FNumberStyle := False;
 FMaxValue := -1;
 PopupMenu := MainForm.mnuIEInput;
end;

procedure TDMCEdit.Change;
var
 S: string;
 SStart, SLength: Integer;
begin
 inherited;
 if NumberStyle then
   begin
     S := Text;
     SStart := SelStart;
     SLength := SelLength;
     while (Length(S) > 0) and (S[1] = "0") do
       begin
         Delete(S, 1, 1);
         Dec(SStart);
       end; { while }
     if SStart < 0 then
       begin
         Inc(SLength, SStart);
         if SLength < 0 then SLength := 0;
         SStart := 0;
       end; { if }
     if S = "" then
       begin
         Text := "0";
         SelectAll;
         Exit;
       end
     else if S > MaxInt64Str then
       Value := MaxInt64
     else if (MaxValue > -1) and (Value > MaxValue) then
       Value := MaxValue
     else
       Text := S;
     SelStart := SStart;
     SelLength := SLength;
   end; { if }
end;

procedure TDMCEdit.WMPaste(var Msg: TMessage);
begin
 if NumberStyle and not IsNumber(Clipboard.AsText) then
   begin
     Perform(WM_CHAR, VK_SPACE, 0);
     Msg.Result := 0;
   end
 else
   inherited;
end;

procedure TDMCEdit.SetNumberStyle(const Value: Boolean);
var
 Long: Integer;
begin
 if FNumberStyle <> Value then
   begin
     FNumberStyle := Value;
     if FNumberStyle then
       Long := GetWindowLong(Handle, GWL_STYLE) or ES_NUMBER
     else
       Long := GetWindowLong(Handle, GWL_STYLE) and ES_NUMBER;
     SetWindowLong(Handle, GWL_STYLE, Long);
     if FNumberStyle then Change;
   end; { if }
end;

function TDMCEdit.GetValue: Int64;
begin
 if NumberStyle then
   Result := StrToInt64Def(Text, -1)
 else
   Result := -1;
end;

procedure TDMCEdit.SetValue(const Value: Int64);
begin
 if NumberStyle then
   Text := IntToStr(Value);
end;

procedure TDMCEdit.SetMaxValue(const Value: Int64);
begin
 if FMaxValue <> Value then
   FMaxValue := Value;
end;


 
Gero ©   (2006-10-27 21:26) [4]

> PopupMenu := MainForm.mnuIEInput;

Это лишнее )


 
Gero ©   (2006-10-27 21:27) [5]

> Если сможешь заюзать

Прочитал второй вопрос. Видимо, напрасно я выкладывал (


 
Gydvin ©   (2006-10-27 22:42) [6]


> Джо ©   (27.10.06 21:20) [2]
>
> 1)
> procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key:
>  Char);
> begin
>  if not (Key in ["0".."9"]) then
>    Key := #0
> end;
> Не спасет от вставки из буфера обмена.

кинь на форму пустой popurmenu и подключи его к edit"y


 
Gero ©   (2006-10-27 22:49) [7]

> [6] Gydvin ©   (27.10.06 22:42)

Зачем так издеваться над пользователем?


 
Leonid Troyanovsky ©   (2006-10-27 22:59) [8]


> Gero ©   (27.10.06 22:49) [7]
> > [6] Gydvin ©   (27.10.06 22:42)
>
> Зачем так издеваться над пользователем?


Ведь пользователи любят попменю.

--
Regards, LVT.


 
Gydvin ©   (2006-10-27 23:00) [9]


> Зачем так издеваться над пользователем?

набирать, так набирать )))))


 
Gydvin ©   (2006-10-27 23:01) [10]

или пусть подключает и добавляет свои меню с нужной обработкой


 
Gero ©   (2006-10-27 23:04) [11]

> [10] Gydvin ©   (27.10.06 23:01)

Зачем свои меню, стандартного достаточно.


 
Gydvin ©   (2006-10-27 23:11) [12]

да знаю, что достаточно, просто проще заблокировать вставку из clipboard через popurmenu (как говорится через ж...)


 
Gero ©   (2006-10-27 23:12) [13]

> [12] Gydvin ©   (27.10.06 23:11)

См. [7]


 
Gydvin ©   (2006-10-27 23:15) [14]


> Gero ©   (27.10.06 23:12) [13]
>
> > [12] Gydvin ©   (27.10.06 23:11)
>
> См. [7]


Это уже цикл получается )))))


 
Max.66RUS ©   (2006-10-28 18:23) [15]

Спасибо всем. Воспользовался процедурой, которую выложил Джо. Всё отлично работает, только у меня по ней возник один вопрос: как можно сделать, чтобы при сохранении текстового файла, при открытии диалога сохранения, имя файла было уже вписано, и при этом оно бралось из Edit1.Text. Т.е. например, если в Edit1.Text написано слово "Файл", то при сохранении, это слово должно быть именем файла...? Заранее спасибо.


 
Ketmar ©   (2006-10-28 18:52) [16]

нет. это не "начинающим". это "надмозгам". а у него ещё (судя по анкете) -- высшее образование... %-(


 
Desdechado ©   (2006-10-28 19:33) [17]

TsaveDialog + F1


 
MsGuns ©   (2006-10-28 19:50) [18]

В событии OnChange проверять содержимое Text и, если ошибка, то "бибикать" и восстанавливать предыдущее корректное содержимое, сохраненное в этом же обработчике в случае правильного ввода.


 
Max.66RUS ©   (2006-10-28 19:57) [19]

MsGuns, Desdechado - спасибо большое.

Ketmar - я могу назвать кучу областей знаний, в которой ты даже "надмозгом" называться не сможешь...


 
Ketmar ©   (2006-10-28 20:40) [20]

>[19] Max.66RUS(c) 28-Oct-2006, 19:57
>Ketmar - я могу назвать кучу областей знаний, в которой ты
>даже "надмозгом" называться не сможешь...
я могу ещё больше. но нежелание элементарно нажать F1 и почитать -- это даже не "надмозговость". это обыкновенная наглость. если не хуже -- тупость.


 
Anatoly Podgoretsky ©   (2006-10-28 21:43) [21]


> Ketmar - я могу назвать кучу областей знаний

Не надо, вопрос про программирование и про твое плавание в нем. Пока налицо явная лень, всего то нажать F1 и посмотреть доступные свойства, ума для этого много не надо.


 
MsGuns ©   (2006-10-28 22:45) [22]

Для сохранения введенных в предыдущем сеансе значений придуманы "установки", механизм которых исчерпывающе реализованы в TIniFile (use IniFiles). Сама внда вовсю пользуется этим механизмом. Никакие "файлы" придумывать не надо, если конечно, сохраняемая информация не имет большой объем и сложную структуру - тогда дорога в Базы Данных.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.044 c
2-1161862521
Kosh
2006-10-26 15:35
2006.11.12
подсказка


2-1162113417
Серый
2006-10-29 12:16
2006.11.12
Блокировка кнопки


15-1161670572
kroner
2006-10-24 10:16
2006.11.12
А Вы в это верите?


6-1150873944
skiermax
2006-06-21 11:12
2006.11.12
список портов


2-1161773761
kulkse
2006-10-25 14:56
2006.11.12
частная очередь сообщений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский