Форум: "Начинающим";
Текущий архив: 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.048 c