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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.006 c
1-1219636871
checkmate-maker
2008-08-25 08:01
2009.10.18
TRxRichEdit


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


2-1250396665
Киря
2009-08-16 08:24
2009.10.18
lnk


15-1250195405
Юрий
2009-08-14 00:30
2009.10.18
С днем рождения ! 14 августа 2009 пятница


15-1250146126
Mar$ell
2009-08-13 10:48
2009.10.18
Microsoft SQL Server 2008 Express Edition with Tools





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский