Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.18;
Скачать: CL | DM;

Вниз

Как автоматически ставить пробел после запятой   Найти похожие ветки 

 
Dymok ©   (2009-08-14 15:12) [0]

TDBMemo
Пользователи все время тупят и забывают ставить пробел после запятой.
Как написать событие, чтобы при наборе запятой автоматически после неё вставлялся пробел?


 
Медвежонок Пятачок ©   (2009-08-14 15:14) [1]

Это чтобы суммы в меме выглядели как 3, 62 ?


 
Медвежонок Пятачок ©   (2009-08-14 15:15) [2]

И что делать если юзер не тупит, и пробел вставляет руками как положено?
Задавать следующий вопрос как написать событие убирающее двойные пробелы?


 
Dymok ©   (2009-08-14 15:21) [3]

В моем случае там не будет сумм. Только некий список слов, разделенных запятыми.


 
Медвежонок Пятачок ©   (2009-08-14 15:27) [4]

тогда [2]


 
MonoLife ©   (2009-08-14 15:32) [5]


> Как написать событие, чтобы при наборе запятой автоматически
> после неё вставлялся пробел?

if <послезапятой пробел> продолжаем дальше then
begin
 ставим <послезапятой пробел>
 проверяем дальше..
end;


 
Медвежонок Пятачок ©   (2009-08-14 15:35) [6]

все это дурь несусветная.
во первых есть BeforePost, во вторых запятую тоже могут пропустить как и пробел.
и вся ваша премудрость с элементами AI забуксует.


 
Anatoly Podgoretsky ©   (2009-08-14 15:36) [7]

А зачем пробелы то? Есть ли мальчик.


 
Dymok ©   (2009-08-14 15:52) [8]


> Anatoly Podgoretsky ©   (14.08.09 15:36) [7]
> А зачем пробелы то? Есть ли мальчик.


Пробелы для корректного переноса по словам при печати.


 
Dymok ©   (2009-08-14 15:54) [9]

Если обрабатывать OnKeyPress
if Key="," then key:=
Получиться? Как дальше?


 
Inovet ©   (2009-08-14 15:57) [10]

> [8] Dymok ©   (14.08.09 15:52)
> Пробелы для корректного переноса по словам при печати.

Может кнопку формат предусмотреть, или перед печатью это делать.


 
Kolan ©   (2009-08-14 16:00) [11]


> Пробелы для корректного переноса по словам при печати.

Пусть перенос по словам переносит не только по пробелу, но и по знакам препинания.


 
Dymok ©   (2009-08-14 16:03) [12]


> Kolan ©   (14.08.09 16:00) [11]
> > Пробелы для корректного переноса по словам при печати.
> Пусть перенос по словам переносит не только по пробелу,
> но и по знакам препинания.

Для печати использую FastReport, там перенос автоматически, типа как в Excel


 
Dymok ©   (2009-08-14 16:04) [13]

А как узнать коды клавиш #...  ?


 
Медвежонок Пятачок ©   (2009-08-14 16:06) [14]

Если обрабатывать OnKeyPress
if Key="," then key:=
Получиться? Как дальше?


А дальше тебя ждут приколы вашего городка.
Этот код не гарантирует от того, что ты сейчас имеешь.


 
Dymok ©   (2009-08-14 16:16) [15]

Мне не нужно гарантий.
Мне нужен прямой ответ - как при нажатии "," выводить ", "  ?


 
Медвежонок Пятачок ©   (2009-08-14 16:21) [16]

зачем он тебе, если у тебя без этих телодвижений нет гарантий, и после этих телодвижений гарантий не будет?


 
Медвежонок Пятачок ©   (2009-08-14 16:23) [17]

Кроме того, все уже сказано. Есть событие датасета BeforePost.
в конце концов есть обработчик клика кнопки "Ок" или "сохранить".
Чего еще надо?


 
Kolan ©   (2009-08-14 16:26) [18]

Не понятно что вызывает затруднения. Вы не можете написать конструкцию if ... then?
— Прочтите учебник.

Вы не знаете какое событие обрабатывать?
— Возможно OnKeyPress подойдет.

«Пользователи все время тупят...»
Вы сделали одну из тех гадких программ, из-за которых люди думают, что компьютеры — это что-то сложное. Тупите вы, заплатите хорошему дизайнеру, он разработает вам нормальный интерфейс.


 
Kolan ©   (2009-08-14 16:26) [19]

Не понятно что вызывает затруднения. Вы не можете написать конструкцию if ... then?
— Прочтите учебник.

Вы не знаете какое событие обрабатывать?
— Возможно OnKeyPress подойдет.

«Пользователи все время тупят...»
Вы сделали одну из тех гадких программ, из-за которых люди думают, что компьютеры — это что-то сложное. Тупите вы, заплатите хорошему дизайнеру, он разработает вам нормальный интерфейс.


 
{RASkov} ©   (2009-08-14 16:37) [20]

Перед печатью или записью в базу сделать StringReplace(); заменить все "," на ", "


 
Dymok ©   (2009-08-14 16:37) [21]

Kolan - у вас словесный понос


 
{RASkov} ©   (2009-08-14 16:55) [22]

function InsertSpaceAfterComma(ATxt: String): String;
var N: Integer;
begin
 Result:=ATxt;
 for N:=Length(ATxt)-1 downto 1 do
  if ATxt[N]="," then if ATxt[N+1]<>#32 then Insert(#32, Result, N+1);
end;


 
MsGuns ©   (2009-08-14 17:02) [23]

Между тем Колян дело говорит


 
{RASkov} ©   (2009-08-14 17:07) [24]

Хех, посмотреть бы на идеальную программу от Коляна :)
(ну эт типа шутки)
:о)


 
Anatoly Podgoretsky ©   (2009-08-14 17:12) [25]

> {RASkov}  (14.08.2009 17:07:24)  [24]

Мысли и программы это разные вещи, плохой танцор - хороший папа


 
Dymok ©   (2009-08-14 17:22) [26]

Накопал

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = char(",") then
SendMessage(Memo1.Handle, WM_CHAR, Word(" "), 0);
end;


Но, к сожалению, сначала пробел вставляет, зараза, а потом уже запятую...


 
Медвежонок Пятачок ©   (2009-08-14 17:25) [27]

Но, к сожалению, сначала пробел вставляет, зараза, а потом уже запятую...

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


 
Dymok ©   (2009-08-14 17:26) [28]

Догадаться, я и сам догадался. А вот как исправить...


 
Медвежонок Пятачок ©   (2009-08-14 17:27) [29]

Два раза сендмессадж и кей := 0 ?


 
Inovet ©   (2009-08-14 17:28) [30]

> [26] Dymok ©   (14.08.09 17:22)
> Накопал
>
> procedure TForm1.Memo1KeyPress(Sender: TObject; var Key:
> Char);
> begin
> if Key = char(",") then
> SendMessage(Memo1.Handle, WM_CHAR, Word(" "), 0);
> end;
>
> Но, к сожалению, сначала пробел вставляет, зараза, а потом
> уже запятую...

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key = char(",") then
 begin
   Key = " ";
   SendMessage(Memo1.Handle, WM_CHAR, Word(","), 0);
 end
end;

Ы?:)
А чем тебе неоднократно советовавшееся форматирование не угодило?


 
Медвежонок Пятачок ©   (2009-08-14 17:30) [31]

А чем тебе неоднократно советовавшееся форматирование не угодило?

он не ожидает копи-паста в мемо. или бэкспейса после запятой.
верующий он короче.


 
Dymok ©   (2009-08-14 17:39) [32]

Копи пасты и бекспейсы - это на усмотрение пользователя, мы ему автозамену при воде предлагаем (вспомните тот же MS Office), которую можно отменить и т.п.

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = char(",") then
begin
  Key = " ";
  SendMessage(Memo1.Handle, WM_CHAR, Word(","), 0);
end
end;

- не работает. Вставляет несколько пробелов.
Форматирование - в понедельник попробую, может и понравиться


 
Dymok ©   (2009-08-14 17:41) [33]

Наверно после SendMessage(Memo1.Handle, WM_CHAR, Word(","), 0); вновь идет обработка key пресс


 
Медвежонок Пятачок ©   (2009-08-14 17:43) [34]

- не работает. Вставляет несколько пробелов.

Два сендмессджа. Один с запятой, второй с пробелом.
После чего вар-параметр убиваем в ноль.


 
Dymok ©   (2009-08-14 17:48) [35]

SendMessage(dbZavNom.Handle, WM_CHAR, Word(","), 0);
SendMessage(dbZavNom.Handle, WM_CHAR, Word(" "), 0);
Key:=#0;
???

Не-а ... Получается после любого SendMess c запятой вновь лезет в Onkeypress


 
Медвежонок Пятачок ©   (2009-08-14 17:53) [36]

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


 
Inovet ©   (2009-08-14 18:35) [37]

> [36] Медвежонок Пятачок ©   (14.08.09 17:53)
> а отключить обработчик перед сендмессаджем а потом включить
> снова ты опять конечно же догадался

Лучше смотреть последний символ, и если это знак препинания, а текущий не знак препинания, то посылать пробел.


 
Медвежонок Пятачок ©   (2009-08-14 18:39) [38]

лучше вообще не бодаться с обработкой налету как уже было сказано.
но парень решил идти своим путем.

тем более что такое последний символ? я курсор двину в середину строки и нажму запятую, и вся логика упадет.

а так try/finally будет железобетонно работать отключая обработчик и включая снова


 
Kolan ©   (2009-08-14 23:24) [39]

Димок (я правильно произношу?), чтобы я был не голословен, обнародуйте сценарий работы пользователя и несколько скриншотов программы и я постараюсь объяснить свои слова.

*И почему мне кажется, что сценарий никто не писал, а может, даже никто и не знает что это такое?

Я почти уверен, что вы решаете не ту задачу. Отстаньте от ваших бедных пользователей, нравится им забывать ставить запятые — пусть забывают, а вы потом, после того, как они всё введут, исправляйте данные так, как вам угодно. Как это сделать вам уже рассказали.

Да, RASkov, к сожалению, показать особенно и нечего. Все использующиеся в данный момент программы я написал, когда думал примерно так же как автор этого вопроса.

Вот КСИНО есть (http://www.ksoftware.ru/wiki/ksino), но это интерфейс просто не очень ужасный, до хорошего ему далеко. Да и пощупать негде.

Посмотреть можно на Менеджер кредитов (http://www.ksoftware.ru/wiki/kcreditsmanages) — пример совково-дельфового говна с вкраплениями орехов кое где.


 
Kolan ©   (2009-08-14 23:26) [40]

Вместо «нравится им забывать ставить запятые » правильно читать «нравится им забывать ставить пробелы после запятых»


 
Andy BitOff ©   (2009-08-14 23:38) [41]

> Kolan ©   (14.08.09 23:24) [39]
> Посмотреть можно на Менеджер кредитов (http://www.ksoftware.ru/wiki/kcred
> itsmanages) — пример совково-дельфового говна с вкраплениями
> орехов кое где.

Не эффективное расходование рабочего пространства, на лицо. Эх, на писали вы для рабочих мест с разрешением 640х480.


 
Kolan ©   (2009-08-15 00:04) [42]

Andy BitOff, говорите конкретнее и предлагайте чётче.


 
Andy BitOff ©   (2009-08-15 16:20) [43]

Дык, Николай, я ничего не предлагаю и, собственно, советовать ничего не собираюсь. Просто, на мой взгяд, пространство формы расходуется не оптимально и если касаться эргономики в той ее части, что относится к биомеханике (в меньшей степени) и к инженернерной психологии (в большей), то это также не эффективно, т.к. юзеру сложно увидеть картину полностью из-за большого разброса данных по форме. Ему приходится выискивать интересующие его данные глазами, что и является не оптимальным. Конечно, через некоторое время юзер привыкает и знает где находится интересующая его информация, но вы же должны знать, как сказывается на дальнейшем восприяти продукта, первое знакомство с ним.


 
Kolan ©   (2009-08-15 23:17) [44]

Инженерная психология — это когнетика видимо.

Я, Andy BitOff, не пойму какая информация по вашему мнению и как разбросана. То есть в программа ужасна, но где информация разбросана — я не вижу.

Чтобы вам было проще вот сценарии, они простые.

1. Приходит мужик и хочет взять кредит. Тётка нажимает кнопку «Добавить должника». Вводит его данные и сохраняет. Тут же ей предлагается открыть на него кредит (да, мерзотной модальной формой). Тыкает «Да». Заполняет данные кредита (процент, сумму и пр.) и сохраняет. Печатает док-ты, который тут же открываются.

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

3. Иногда программа индексирует просрочки. Крупные задолжники выделяются красным и жирным. Тётка печатает спец. команде их данные и они с ними работают.

Стандартная программа, стандартное дерьмо и то, что я сделал её за две недели (включая выработку ТЗ и понимание того, как вообще это все должно работать) вечеров меня не оправдывает. Просто тогда я лучше не мог.


 
Virgo_Style ©   (2009-08-17 09:53) [45]


> говна
</I
> дерьмо

>

Мы в пивной?


 
Dymok ©   (2009-08-17 10:52) [46]

Кулан (а я правильно произношу?), легче всего, когда не знаешь решения, объявить что, дескать, задача не имеет смысла и делать все надо совсем по-
другому. В то же время не забыть дешево пропиарить совершенно ни к месту собственные программные продукты, предлложить собеседнику сделать тоже самое (может еще членами померяемся?), одновременно обвинив партнера в незрелости и недальновидностии. Вы просто дурно воспитаны, мой друг. Вы стремитесь возвыситься в глазах общества за счет унижения других. Кто занимается вашим воспитанием? Предвижу ответ типа: "Когда папа Карло, а когда никто."
Причем, почти сразу вы демонстрируете огромную неуверенность в своих собственных силах, при малейшейневинной критике со стороны Andy BitOff Вы пытаетесь сохранить лицо, самоуничижая себя. Типа  "Я то сам супер, но смотрите каким "стандртным дерьмом" (это я вас цитирую) приходиться заниматься, на что приходиться тратить свою бесценую молодость. Неужели так боитесь критики? Надо броться с комплексами, иначе они Вас задушат, Kolan.
А задача в общем-то проста. Не надо пытаться вникать в "сценарий" программы, отловить возможные подводные камни, это лишний труд, воспринимайте её как абстрактную.

Как после ввода запятой в TDBMemo замечательным, умным, самым продвинутым в мире пользователем, автоматически вставлять пробел после этой запятой, в месте ввода/редактирвания. Аналог функции "Автоформат" в любом текстовом редакторе например Word или OpenOffice.Writer

И еще. Сделайте одолжение - если не знаете решения этой и других задач в других темах - не пишите ничего, не выставляйте напоказ собственную недоразвитость.


 
Kolan ©   (2009-08-17 11:28) [47]

Конечно вы произносите не правильно. Нужно очень плохо знать русский и английский, чтобы букву «О» произнести как «У». Даже дети не ошибаются, так как буквы выглядят одинаково.

На счет стандартного дерьма — вы не правильно трактуете мои слова. Смысл их в том, что ошибки в дизайне той программы я вижу и сам, поэтому и критиковать её особого смысла нет, но тогда, я не знал как можно сделать лучше. А программы я показал в ответ на комментарий Раскова.

Теперь по сабжу. То что вы написали — это не сценарий, это задание кодеру, который его тупо реализует. Поэтому формулируя вопрос таким образом вы можете рассчитывать только на техническое решение.

Технически можно сделать так, как вы делали и это будет работать.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   BitBtn1: TBitBtn;
   procedure Memo1KeyPress(Sender: TObject; var Key: Char);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   FReactOnKeyPress: Boolean;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 FReactOnKeyPress := True;
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key = ",") and FReactOnKeyPress then
 begin
   FReactOnKeyPress := False;
   try
     SendMessage(Memo1.Handle, WM_CHAR, Word(","), 0);
     SendMessage(Memo1.Handle, WM_CHAR, Word(" "), 0);
     Key := #0;
   finally
     FReactOnKeyPress := True;
   end;
 end;
end;

end.


Но! Так как тут собрались не роботы, а нормальные люди, которые думают, то уже в [2] вам заметили, что ваше решение будет работать мягко говоря не всегда.

Поэтому вам и предложили форматировать строку нужным образом перед вставкой в базу.

А я еще добавляю, что, скорее всего (сценариев вы так и не показали) ваше решение будет раздражать пользователей, так как то, что они вводят будет изменяться по не понятным правилам.

В той же авто замене в Вёрде есть возможность отменить эту автозамену, вы будите реализовывать такую возможность? — Нет конечно, потому что она там не нужна, как и сама автозамена.

Я лично присоединяюсь к Раскову  [20]. С точки зрения человеко-машинного взаимодействия это вариант неплох. Пользователи вводят так, как могут и никто их не дергает. Да и с точки зрения кода все очень просто.

---
Вам нужно научится слушать (или читать), на этом форуме люди редко занимаются пиаром, рекламой, самоутверждением и пр. Наоборот, часто ответы формулируются так, чтобы человек увидел свои ошибки.



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

Текущий архив: 2009.10.18;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.016 c
2-1250111284
Евгений Р.
2009-08-13 01:08
2009.10.18
Положение ToolButton


15-1250495822
D.L.
2009-08-17 11:57
2009.10.18
EurekaLog


11-1206427258
Петровичъ
2008-03-25 09:40
2009.10.18
MCK для BDS2005-2007


3-1228230921
mosco
2008-12-02 18:15
2009.10.18
Uniqueidentifier в фигурных скобках, как от них избавиться?


1-1213341676
dmitry_12_08_74
2008-06-13 11:21
2009.10.18
THotKey нормально не работаетс горячими клавишами типа Win...