![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пара простых вопросов... [D7, XP]
Max.66RUS © (2006-10-27 20:53:00)1) Как можно сделать такую опцию, чтобы в Edit1.Text с клавиатуры вводились только цифры, а попытка ввода других символов игнорировалась.
2) Подскажите процедуру сохранения содержимого Edit1.Text в текстовый файл по нажатию на копку, с возможностью выбрать нужный каталог и ввести нужное имя файла.
Заранее спасибо.
MsGuns (2006-10-28 22:45:00) [1]Для сохранения введенных в предыдущем сеансе значений придуманы "установки", механизм которых исчерпывающе реализованы в TIniFile (use IniFiles). Сама внда вовсю пользуется этим механизмом. Никакие "файлы" придумывать не надо, если конечно, сохраняемая информация не имет большой объем и сложную структуру - тогда дорога в Базы Данных.
Anatoly Podgoretsky (2006-10-28 21:43:00) [2]
> Ketmar - я могу назвать кучу областей знаний
Не надо, вопрос про программирование и про твое плавание в нем. Пока налицо явная лень, всего то нажать F1 и посмотреть доступные свойства, ума для этого много не надо.
Ketmar (2006-10-28 20:40:00) [3]>[19] Max.66RUS(c) 28-Oct-2006, 19:57
>Ketmar - я могу назвать кучу областей знаний, в которой ты
>даже "надмозгом" называться не сможешь...
я могу ещё больше. но нежелание элементарно нажать F1 и почитать -- это даже не "надмозговость". это обыкновенная наглость. если не хуже -- тупость.
Max.66RUS (2006-10-28 19:57:00) [4]MsGuns, Desdechado - спасибо большое.
Ketmar - я могу назвать кучу областей знаний, в которой ты даже "надмозгом" называться не сможешь...
MsGuns (2006-10-28 19:50:00) [5]В событии OnChange проверять содержимое Text и, если ошибка, то "бибикать" и восстанавливать предыдущее корректное содержимое, сохраненное в этом же обработчике в случае правильного ввода.
Desdechado (2006-10-28 19:33:00) [6]TsaveDialog + F1
Ketmar (2006-10-28 18:52:00) [7]нет. это не "начинающим". это "надмозгам". а у него ещё (судя по анкете) -- высшее образование... %-(
Max.66RUS (2006-10-28 18:23:00) [8]Спасибо всем. Воспользовался процедурой, которую выложил Джо. Всё отлично работает, только у меня по ней возник один вопрос: как можно сделать, чтобы при сохранении текстового файла, при открытии диалога сохранения, имя файла было уже вписано, и при этом оно бралось из Edit1.Text. Т.е. например, если в Edit1.Text написано слово "Файл", то при сохранении, это слово должно быть именем файла...? Заранее спасибо.
Gydvin (2006-10-27 23:15:00) [9]
> Gero © (27.10.06 23:12) [13]
>
> > [12] Gydvin © (27.10.06 23:11)
>
> См. [7]
Это уже цикл получается )))))
Gero (2006-10-27 23:12:00) [10]> [12] Gydvin © (27.10.06 23:11)
См. [7]
Gydvin (2006-10-27 23:11:00) [11]да знаю, что достаточно, просто проще заблокировать вставку из clipboard через popurmenu (как говорится через ж...)
Gero (2006-10-27 23:04:00) [12]> [10] Gydvin © (27.10.06 23:01)
Зачем свои меню, стандартного достаточно.
Gydvin (2006-10-27 23:01:00) [13]или пусть подключает и добавляет свои меню с нужной обработкой
Gydvin (2006-10-27 23:00:00) [14]
> Зачем так издеваться над пользователем?
набирать, так набирать )))))
Leonid Troyanovsky (2006-10-27 22:59:00) [15]
> Gero © (27.10.06 22:49) [7]
> > [6] Gydvin © (27.10.06 22:42)
>
> Зачем так издеваться над пользователем?
Ведь пользователи любят попменю.
--
Regards, LVT.
Gero (2006-10-27 22:49:00) [16]> [6] Gydvin © (27.10.06 22:42)
Зачем так издеваться над пользователем?
Gydvin (2006-10-27 22:42:00) [17]
> Джо © (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 21:27:00) [18]> Если сможешь заюзать
Прочитал второй вопрос. Видимо, напрасно я выкладывал (
Gero (2006-10-27 21:26:00) [19]> PopupMenu := MainForm.mnuIEInput;
Это лишнее )
Gero (2006-10-27 21:25:00) [20]Вот, писал когда-то. Если сможешь заюзать, все будет, и проверка при вставке, и контроль максимального значения, даже подсказка будет показываться, когда не то нажимаешь.
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;