Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi

Модерирует : ShIvADeSt

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

Xarde



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakalve
Обработка происходит _до_ изменения отображения эдиты, поэтому можешь смело затирать неприемлемые символы.

Всего записей: 266 | Зарегистр. 06-07-2003 | Отправлено: 23:12 14-08-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakalve

Цитата:
А Edit на ивенте OnKeyPress вроде бы стирает символы неправильные а не не дает им  
писаться вообще.

Все ясно, ты даже не тестил код, а просто пишешь, что он ВРОДЕ БЫ не рабочий.  

Цитата:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);  
begin  
        if Key='a' then Key:='b';  
end;

При работе данного кода, ты даже не увидишь, что пишется буква а, а сразу будет выводиться б. Неужели так трудно было вставить это в дельфи и проверить? Тогда бы
Цитата:
То есть если я нажму допустим не цифру и не XYZW, то он напишет ее в строке а потом отработав условие типа  
if not (Key in ['0'..'9', #8]) then  
сотрет ее. А требуется чтобы он вообще не давал писать символы, не предусмотренные правилами.

ты не написал бы.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:46 15-08-2005
zvyagaaa



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Господа, вопрос у меня возник не праздный. Мне необходимо создать массив из FieldNames в ADO Tables? Причем, я как понимаю, имена полей в формате WideString, а нужно Float.
Либо, как можно еще решить следующую задачу. Мне необходимо проинтерполировать два столбца с определенным коэффициентом. Допустим, в одном столбце (табличное значение) значение физической величины 0,5 в следующем 1, а реально оно получилось 0,75. Так вот, как мне найти число, которое находится в строчку?
Попробую по-понятней. Есть следующего вида таблица. Мне известны данные, например, столбца, 0,75, строки 1,как найти то, что значение этой величины будет 1,5?
ADOTable использовать обязательно. Раньше, я пользовался массивом, но это не есть гуд.
     |0,5 |1
1   |1    | 2
2   |3    |4
Надеюсь на помощь.

Всего записей: 776 | Зарегистр. 02-02-2005 | Отправлено: 06:36 15-08-2005
Felan

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Zakalve
Читай внимательно мой пример. Если присвоить Key := #0, то будет считаться, что вообще кнопка не нажата.
Неверишь, исходники TWinControl посмотри.
 
ЗЫЖ Раз уж просишь помоши, так хоть разобрался бы с тем, что тебе советуют.

Всего записей: 58 | Зарегистр. 04-03-2003 | Отправлено: 10:45 15-08-2005
EvSeKo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемы участники форума, позвольте поинтересоваться.
Я слыхал, что существует какой-то формат для хранения чисел в файле, этот формат формат имеет такое свойство, что любое число будет занимать 10 байт(если я не ошибаюсь). Подскажите, пожалуйста, так ли это. Заранее благодарен.

Всего записей: 68 | Зарегистр. 22-06-2005 | Отправлено: 19:20 15-08-2005
EAS



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
10 байт занимают данные типа extended (для x86). Числа не совсем любые , а в диапазоне 3.6 x 10^-4951 .. 1.1 x 10^4932. С плавающей точкой (действительные числа), точность 19-20 разрядов.
А хранить их в файле или в памяти - значения не имеет

Всего записей: 441 | Зарегистр. 18-07-2003 | Отправлено: 22:44 15-08-2005
zvyagaaa



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну так что, никто решение не подскажет?

Всего записей: 776 | Зарегистр. 02-02-2005 | Отправлено: 06:33 16-08-2005
EvSeKo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А вот насчёт хранения в файле позвольте не согласиться.
Допустим у меня есть число 7,62939453125E-7 и если я его сохраню в файл, предварительно преобразовав его функцией floattostr, то займет оно 16 байт, а не 10. Поэтому я и задал этот вопрос, может есть какой то другой способ.

Всего записей: 68 | Зарегистр. 22-06-2005 | Отправлено: 06:41 16-08-2005
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EvSeKo
А не надо его преобразовывать. Пиши не в текстовый файл.
zvyagaaa
А зачем тебе для таких задач база данных? По-моему массив лучше.
Ну, раз уж так, есть пара вопросов.

  1. Шаг между табличными значениями постоянный?
  2. Какая используется интерполяция?



----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 07:06 16-08-2005
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zvyagaaa

Цитата:
 
Ну так что, никто решение не подскажет?

А ты понятней объяснить можешь, что тебе надо?
По одной строке данных проинтерполировать значения другой строки или что?
Ни черта ведь не понятно из твоего описания. Где входные данные, где результат?
А в твой винегрет еще и способ доступа к данным примешан.
 
Вот это

Цитата:
Господа, вопрос у меня возник не праздный. Мне необходимо создать массив из FieldNames в ADO Tables? Причем, я как понимаю, имена полей в формате WideString, а нужно Float.  
 

вообще песня. Имя поля в формате float - это как? Сам-то понял, что сказал?

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 17:14 16-08-2005
Sky_Drake

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Помогите мне, пожалуйста, с такой штукой.
В Delphi мне нужно помимо основной формы создать ещё один поток, только без окна и самому написать оконную процедуру WndProc где я самостоятельно буду обрабатывать всякие сообщения (WM_ и не только)
Мне это нужно для того, чтобы новый созданый поток сам следил за некоторыми событиями, ловил сообщения от устройств ввода, и т.п. и соответственно изменял некоторые нужные переменные. А программа для основной формы может использовать эти переменные как захочет.
Желательно в этом вспомогательном потоке не использовать никаких средств Delphi - было бы удобно писать код этого вспомогательного потока как WinMain в VisualC++. Я имею ввиду создать, зарегистрировать свой оконный класс, создать невидимое окно, создать message loop и свою процедуру WndProc.
В справке я не смог найти ничего понятного мне. Извините если эта тема уже обсуждалась где-то, тогда пожалуйста киньте мне ссылку.

Всего записей: 3 | Зарегистр. 16-08-2005 | Отправлено: 09:28 17-08-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sky_Drake

Цитата:
В Delphi мне нужно помимо основной формы создать ещё один поток, только без окна и самому написать оконную процедуру WndProc где я самостоятельно буду обрабатывать всякие сообщения (WM_ и не только)

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

Цитата:
Мне это нужно для того, чтобы новый созданый поток сам следил за некоторыми событиями, ловил сообщения от устройств ввода, и т.п. и соответственно изменял некоторые нужные переменные. А программа для основной формы может использовать эти переменные как захочет.  
Желательно в этом вспомогательном потоке не использовать никаких средств Delphi - было бы удобно писать код этого вспомогательного потока как WinMain в VisualC++. Я имею ввиду создать, зарегистрировать свой оконный класс, создать невидимое окно, создать message loop и свою процедуру WndProc.

все что ты перечислил (кроме подмены на свои переменные) реализуется через хуки. Как понять основная программа будет использовать эти переменнные? В смысле логировать их или что?
Поставь задачу понятнее без противоречий, и тогда можно будет конкретно дать ответ. А так задача либо не реашется. либо решается через хуки на клаву и мышь (если ты их имел под устройствами ввода)

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:00 17-08-2005
reflexfx



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветов всем, нужна помощь.
Использую Indy и компонент TIdSMTP для отправки писем, все работает нармально при условии что в имени компа не присутсвуют русские буквы, если еть то выдает Invalid domain name - как обойти это, если кто сталкивался помогите...

Всего записей: 46 | Зарегистр. 23-11-2004 | Отправлено: 10:38 17-08-2005
Sky_Drake

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ок, может я непонятно объяснил. Вообще - я начинающий, поэтому многих вещей не знаю.
Вобщем - Delphi - хорошая штука. Можно очень быстро разрабатывать программы - шлёпнул компонент по форме, описал его реакции на внешние воздействия и готово.
Создание собственной оконной процедуры WndProc тоже удобно (согласен - я не прав - без окна сообщения не пойдут, я имел ввиду окно должно быть невидимым).
Хотелось бы объединить эти две вещи - первая что не нужно мучаться с каждым элементом формы (как это в VisualC++), а просто единым кликом мыши создать нужный компонент и позаботиться о его реакциях, вторая - внутри собственной оконной процедуры вытворять всё что угодно.
Собственная WndProc должна изменять значения каких-либо глобальных переменных. Основная форма (которую создала Delphi) просто использует значения этих переменных для своих нужд, например label1.caption:=somtext; переменная sometext изменяется в WndProc.
Я знаю что есть такой тип методов как message - перекрывает реакцию на событие WndProc у класса. То есть можно создать процедуру-обработчик на событие, например, основной формы. Но мне не очень нравится этот способ. Мне хотелось бы чтобы было так: основная форма - отдельно, моя процедура WndProc - отдельно. Сообщаются они через какие-то переменные.
Насчёт хуков - спасибо, почитаю что это.
Понимаю что это плохой тон задавания вопросов - писать собственный предполагаемый вариант решения. Но я надеюсь что меня кто-нибудь поймёт и подскажет.

Всего записей: 3 | Зарегистр. 16-08-2005 | Отправлено: 11:14 17-08-2005
junik



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день всем !!
 
Сейчас работаю с выводом и редактированием РТФ из делфи. В РТФ есть текст и матем. формулы в Equation. Можно ли как-то добиться вертикального выравнивания по центру текста и формул так, как это сделано в ворде?  
 
Может кто-нибудь с таким работал или сталкивался. Ответьте, плиз.
Пользовался rxRichEdit компонентом, но там в исходниках используется интерфейс из библиотек виндовс и по хелпам он не поддерживает вертикальное выравнивание объектов.

Всего записей: 341 | Зарегистр. 12-08-2003 | Отправлено: 11:55 17-08-2005
zvyagaaa



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Уже разобрался сам.

Всего записей: 776 | Зарегистр. 02-02-2005 | Отправлено: 17:25 17-08-2005 | Исправлено: zvyagaaa, 22:00 19-08-2005
2Polkan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогайте начинающиму :).
 
Надо проверить, что введено в Edit... Это должно быть целое число от нуля и выше... Как узнать, что это не строка типа "dfsdfsdf"? Блин, книгу посеял где-то, теперь мучаюсь..
 
Добавлено:
Нет, уже нашел :)). F1 рулит :)

Всего записей: 435 | Зарегистр. 20-11-2004 | Отправлено: 01:30 18-08-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sky_Drake

Цитата:
Создание собственной оконной процедуры WndProc тоже удобно (согласен - я не прав - без окна сообщения не пойдут, я имел ввиду окно должно быть невидимым).  
Хотелось бы объединить эти две вещи - первая что не нужно мучаться с каждым элементом формы (как это в VisualC++), а просто единым кликом мыши создать нужный компонент и позаботиться о его реакциях, вторая - внутри собственной оконной процедуры вытворять всё что угодно.  
Собственная WndProc должна изменять значения каких-либо глобальных переменных. Основная форма (которую создала Delphi) просто использует значения этих переменных для своих нужд, например label1.caption:=somtext; переменная sometext изменяется в WndProc.  
Я знаю что есть такой тип методов как message - перекрывает реакцию на событие WndProc у класса. То есть можно создать процедуру-обработчик на событие, например, основной формы. Но мне не очень нравится этот способ. Мне хотелось бы чтобы было так: основная форма - отдельно, моя процедура WndProc - отдельно. Сообщаются они через какие-то переменные.

Опять не слишком понятно, что ты хочешь, но вот как можно полностью переопределить WndProc у окна (для чего тебе понадобился другой поток я так и не понял, как и то, что будет происходить внутри WndProc - ведь это просто обработчик оконных процедур, или ты вместо обработчика отдельных событий хочешь иметь возможность обрабатывать в одной процедуре WndProc сразу не сколько событий?) в любом случае вот пример

Цитата:
 
  public
    { Public declarations }
        procedure WndProc(var Msg: TMessage);override;
  end;
.....
 
procedure TfrmDialer.WndProc(var Msg: TMessage);
begin
  CASE Msg.Msg OF
    WM_SYSCOMMAND: if Msg.WParam=AboutProg then ShowAbout;
    WM_USER + 1:
       case Msg.lParam of
          WM_LBUTTONDOWN:
            begin
                  end;
            end;
          WM_RBUTTONDOWN:
        end;
        inherited;
end;
 

Есть возможность также подменить обработчик каждого контрола, который имеет хэндл на свою процедуру обработки. Делается через SetWindowLong и далее по хелпу. Возможно я сумел помочь, так как либо ты что то не правильно называешь, либо просто объясни что конкретно долджно происходить, если это не тайна.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:10 18-08-2005
Sky_Drake

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, это очень похоже на то что мне нужно. Попробую реализовать по твоей подсказке.
Единственное что мне не очень нравится - вызов родительской функции inherited в конце WndProc. Но я думаю если это окошко TfrmDialer (в примере) хорошенько спрятать, например: ShowWindow(TfrmDialer.Handle,SW_HIDE); - то можно почти не вызывать родительскую WndProc.
Моя цель вовсе не секрет. Просто мне удобней так работать. Вот, например, в текущей программе должны ловиться события MM_JOY1MOVE (и тому подобные - связанные с джойстиком). Я должен составить свою процедуру WndProc которая пишет в поля записи (record) положения осей и состояния кнопок. А основное окно mainform просто в определённые промежутки времени читает из записи эти числа и выводит из на окно.
Кстати, подсоединил вместо джойстика переменные резисторы и написал программку, которая изменяет громкость звука в соответствии с положением резистора - получился вполне удачный регулятор громкости. У меня пассивные колонки и регулировать звук раньше приходилось через микшеры на taskbar'е.
 
У меня ещё вопросы появились
1) WndProc же должна возвращать какое-то значение системе. Каким образом это реализуется? Может как-то неявно?
Ещё мелкие вопросы: 2)можно ли как-то уменьшить размер конечного exe-файла?
И ещё вопрос не по совсем по Delphi: 3)при использовании ассемблерных комманд чтения/записи в порт - in/out выскакивает ошибка Priveleged instruction (как в Delphi так и в VC++) можно ли как-то получить привелегии на использование этих комманд, или Windows по-любому строго-настрого запретит их использовать? Кроме эмуляции ms-dos у меня WindowsXP

Всего записей: 3 | Зарегистр. 16-08-2005 | Отправлено: 12:02 18-08-2005
ALeXkRU



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sky_Drake

Цитата:
Единственное что мне не очень нравится - вызов родительской функции inherited в конце WndProc

вообще-то если не вызывать - придется вручную писать стОлько кода, оно тебе надо? а так - все наследуется...

Всего записей: 11802 | Зарегистр. 03-12-2003 | Отправлено: 12:14 18-08-2005
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru