Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 76 из 116<  1 ... 73  74  75  76  77  78  79 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 17.11.2006
Откуда: Нижний Новгород
А по возможностям самого языка, что предпочтительнее?Мой дядя сисадмин в одной фирме и ему очень нравиться дельфи, он говорит что это самый полноценный язык, вот я и пытаюсь научиться чему нибудь по книжке А Жукова "Изучаем Delphi" для школьников.

_________________
- Что-то дурно мне, пойду-ка я к окну
- Ну иди, какни немного, я подожду..



Партнер
 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
NachinaushiyOver
Ну Дельфи - это Паскаль. Да, в нем некоторых вещей не хватает, которые есть в Си (хотя и правило наоборот тоже действует).
Начинать да, лучше всего с Дельфи (некоторые считают, что лучше начинать с Визуал Бейсика, но я в такой гадости программить не буду даже за 3K). Потом уже можно перейти на что-то другое - хотя в тоже время, сейчас на работе пишу все только в Дельфях и все отлично. Все то, что мне нужно, там есть или можно скачать откуда то.

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
vis11
vis11 писал(а):
Порядка 30 мс. или около того (на глазок )

Хорош у тебя глазок. ;) :D

vis11 писал(а):
А можно как-нибудь измерить эту паузу?

Ессно можно.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  arrSnd: array of TMemoryStream;
  i, Cycles, Duration: Integer;
  sValue, wValue: Int64;
begin
  Cycles:= 10;
  Duration:= 100;
  SetLength(arrSnd, Cycles);
  for i:= low(arrSnd) to High(arrSnd) do
  begin
    arrSnd[i]:= TMemoryStream.Create;
    SndCreate(arrSnd[i], 1000, Duration, 50);
  end;
  sValue:= GetTickCount;
  for i:= low(arrSnd) to High(arrSnd) do
    SndPlay(arrSnd[i]);
  wValue := GetTickCount - sValue;
  for i:= low(arrSnd) to High(arrSnd) do
    arrSnd[i].Free;
  Form1.Caption:= 'Общее время выполнения: ' + IntToStr(wValue) + ' ms, задержка между сигналами: ' + IntToStr((wValue  - Duration * Cycles) div Cycles) + ' ms.';
end;

Но тут тоже есть свои нюансы. :)
При первом после запуска выполнении резалт чуть выше, чем во всех последующих.
Также для разной продолжительности сигнала (точка и тире) задержка разная.
Это нужно учитывать, обсчитывая и "разбавляя" паузами.
Кстати, а скока ms предписано для стандартной продолжительности звучания точки?


 

_SGK , Не хватает у меня толку применить код, на строки " SndCreate (arrSnd[i], 1000, Duration, 50);"
и "// SndPlay(arrSnd[i]);" пишет "Undeclared identifier".

_SGK писал(а):
Кстати, а скока ms предписано для стандартной продолжительности звучания точки?


Всё зависит от скорости передачи (я использовал 1 переменную - коэфициент, когда делал в Паскале.) Существуют стандартные соотношения (для комфортного приёма): длительность тире в 3 раза больше, чем точки; пауза между звуками = длине точки, а пауза между буквами - длине тире. Сейчас я поставил точку=50мс.

_SGK писал(а):
Хорош у тебя глазок

дык я телеграфом хорошо владею, сравнить сигнал и паузу могу :).
_SGK писал(а):
задержка разная

Это я сразу заметил по корявости передачи кода, взятого прямо из паскалевского файла (с переделкой).
Общий план - реализовать возможность изменения тона, скорости и интервалов прямо во время работы.


 

Member
Статус: Не в сети
Регистрация: 17.11.2006
Откуда: Нижний Новгород
По ходу работы с Delphi 6 возник простой вопрос. Как правильно сохранять созданную прогу как проект чтобы потом нажав на одну кнопочку включилась Делфи 6 с открытой сохраненной прогой и всё работало? а то я сохраняю проект, открываю и он компилируется в пустую форму. плиз помогите ламеру ... :oops:

_________________
- Что-то дурно мне, пойду-ка я к окну
- Ну иди, какни немного, я подожду..


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
vis11
vis11 писал(а):
_SGK , Не хватает у меня толку применить код, на строки " SndCreate (arrSnd[i], 1000, Duration, 50);"
и "// SndPlay(arrSnd[i]);" пишет "Undeclared identifier".

Смотри мой пост на предыдущей странице, там unit SndUtl, это оттуда. :wink:
Или сделай аналогично для MakeSound


 

Ага, врубился. Пахает :beer: .
Вот так я хочу реализовать корректировку паузы:
Код:
Procedure TForm1.t ; //задержка
 Begin
  If w1<5 then Sleep (5-w1);
 // w1:=1;
 End;


Procedure TForm1.k ; //короткий - точка
 Begin
  w1:=GetTickCount;
  MakeSound(1200, 5, 60);
  w1:=GetTickCount-w1-5;
   t                           //задержка
 End;

Это срабатывает при точке, большей 30мс, а на высоких скоростях вынужденная пауза больше необходимой и как её уменьшить я не знаю. Проблема, однако... :( .


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
vis11
vis11 писал(а):
Вот так я хочу реализовать корректировку паузы:

Думаю, что нет смысла каждый раз измерять задержку, правильней будет замерять один раз средние продолжительности задержек для точки и тире и, пользуясь этими данными транслировать в последовательность команд.
Ведь отталкиваясь от продолжительности звучания точки и средних задержек для точки и тире все можно легко просчитать.
Возможная погрешность в 5-ок ms между сигналами ИМХО несущественна.
Уши поди не как у слона, чи шо? :)

vis11 писал(а):
а на высоких скоростях вынужденная пауза больше необходимой

Ну, фиг знат :) я не специалист в азбуке Морзе, шо ишо за высокие скорости?
Я в шоке…

vis11 писал(а):
и как её уменьшить я не знаю.

Я у тебя специально спрашивал о рекомендованной длительности звучания точки.
Как я понял, ее нет, а есть только соотношение между продолжительностью звучания точки и всем остальным.
Вот и подбери продолжительность точки так, чтобы остальное соответствовало.

vis11 писал(а):
Проблема, однако...

Та не… :) ИМХО сам себя пугаешь… ;)


 

_SGK писал(а):
нет смысла каждый раз измерять задержку

_SGK писал(а):
подбери продолжительность точки

Так ведь скорость должна при необходимости меняться во время работы, а не задаваться заранее. То же касается тона и самих пауз.
_SGK писал(а):
шо ишо за высокие скорости?

Скорость обычно измеряется в знаках в минуту. Необходимо, чтобы прога поддерживала качественную передачу хотябы
200 зн/мин. Я правда столько не принимаю-это из области рекордов, но вполне достижимых. Чтобы понять, надо услышать.
200 зн/мин со стороны уже похоже на треск. (точка ок 10мс). Могу код послать, тока он громоздок.
Нашёл аналогичную прогу на Delphi написанную - так там максимальная скорость невысока. Неужто та же проблема была?
И вроде как исходники к ней есть. Токо фиг я в них разберусь :)...


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
vis11
Учитывая то, что с правилами передачи сигналов азбукой Морзе я познакомился после твоего поста :) советчик из меня, мягко говоря, неважный. ;)
Однако я точно понял то, что для передачи все взаимосвязано, а значит просчитываемо.
Смотрим: "В азбуке Морзе каждой букве соответствует комбинация из длинных посылок (тире) и коротких посылок (точек)".
1. За единицу длительности в телеграфной азбуке принимается длительность точки.
2. Длительность тире равняется длительности трех точек.
3. Пауза между знаками в букве - одна точка.
4. Пауза между буквами в слове 3 точки.
5. Пауза между словами 7 точек.
Насколько я понял это все.
При использовании с ПК нужно учитывать еще пару моментов, таких как задержки на создание самих звуков точки и тире и задержки между звучанием точки и тире, для корректирования длинны пауз между сигналами.
Соответственно располагая этими данными и отталкиваясь от продолжительности звучания точки и задержек для точки и тире (точка * 3) все паузы легко просчитываются.
По входящим данным (предложению) строится список последовательности команд, состоящий из коротких звуков (точек), пауз и длинных звуков (тире).
И потом все это дело радостно :) передается (обрабатывается в цикле) за один раз - пакетом.
Пример: С уважением, В. Пупкин. = последовательность команд передаваемых за один раз.
И ненужно каждый раз создавать экземпляр TMemoryStream, создал до передачи, отработал и освободил.

vis11 писал(а):
Так ведь скорость должна при необходимости меняться во время работы, а не задаваться заранее.

Думаю, что правильно создать три профиля: начинающий, профессионал, эксперт.
Для каждого профиля иметь пять параметров: продолжительность звучания точки, задержка для точки, задержка для тире (точка * 3), тон звучания точки, тон звучания тире.
Все паузы рассчитывать, отталкиваясь от этих данных.
Каждого "собеседника" "привязать" к конкретному профилю.

vis11 писал(а):
То же касается тона и самих пауз.

Смотри выше.

vis11 писал(а):
200 зн/мин. Я правда столько не принимаю-это из области рекордов, но вполне достижимых.

Думаю, что если ты передашь ему вместо двухсот знаков сто, то он от этого не умрет, опять же будет ему время "в носу поковыряться"… :)
Позитив есть везде… ;)


 

Блин, заново сообщение посылаю :shock:...
_SGK писал(а):
три профиля: начинающий, профессионал, эксперт.

:D Такое никак не прокатит. При тренировке скорость наращивается постепенно, шаг не более 5 зн/мин.
К тому же у всех свои вкусы в плане тона и пауз.
_SGK писал(а):
экземпляр TMemoryStream, создал до передачи, отработал и освободил.

Тоже низзя :( . Скорость должна менятся во время передачи, её на слух подстраивают для комфортной работы, как и тон.
_SGK писал(а):
вместо двухсот знаков сто

И тут уступку не сделать. Например, норма для МС - 180, для КМС - 150 зн. Я сам 130 принимаю. Поэтому чёткая работа должна обеспечиваться до 180 - 200.
_SGK писал(а):
Позитив есть везде
Можно, конечно, создавать TMemoryStream для 5 букв (группа), но это не есть гут.


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
vis11
vis11 писал(а):
Такое никак не прокатит.

+
бла-бла-бла...:)

Не стоит понимать мои слова буквально :D, это было лишь общий взгляд на вопрос. ;)
Мало три профиля - создай хоть 133 :), ИМХО не принципиально.
Хоть вообще на каждый контакт отдельные установки.
Принципиально лишь то :D, что при использовании всего двух звуков - точки и тире ТУПО :insane: каждый раз для них выделять и освобождать память плюс создавать звук.
Создай два звука сразу под конкретного человека (его скорость) в двух экземплярах TMemoryStream, а потом просто проигрывай нужный, с помощью sndPlaySound.

vis11 писал(а):
Можно, конечно, создавать TMemoryStream для 5 букв (группа), но это не есть гут.

Мдя...


 

Member
Статус: Не в сети
Регистрация: 17.11.2006
Откуда: Нижний Новгород
Подскажите пожалуйста, что нужно написать в процедуре Button1Click(Sender: TObject) чтобы при нажатии без подтверждения выключался компьютер? Ещё один вопрос: почему при включении программы скомпилированной в delphi 6 на XP SP2 она выглядит нормально, ка и все окна windows, а когда сожмешь её до минимума она становится в стиле windows 98 (или даже хуже)? и как это можно предотвратить :)


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
NachinaushiyOver писал(а):
Подскажите пожалуйста, что нужно написать в процедуре Button1Click(Sender: TObject) чтобы при нажатии без подтверждения выключался компьютер?


Код:
procedure ShutdownComputer;
var
  ph: THandle;
  tp, prevst: TTokenPrivileges;
  rl: DWORD;
begin
  OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY, ph);
  LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid);
  tp.PrivilegeCount := 1;
  tp.Privileges[0].Attributes := 2;
  AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl);
  ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;

(c) все тот же DelphiWorld

NachinaushiyOver писал(а):
а когда сожмешь её до минимума она становится в стиле windows 98

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

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 17.11.2006
Откуда: Нижний Новгород
Lord_of_Darkness писал(а):
Должен остаться XPManifest

Это чё такое?
Добавлено спустя 3 минуты, 5 секунд
Lord_of_Darkness писал(а):
procedure ShutdownComputer; var ph: THandle; tp, prevst: TTokenPrivileges; rl: DWORD; begin OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ph); LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid); tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := 2; AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl); ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0); end;

а куда это вставлять?

_________________
- Что-то дурно мне, пойду-ка я к окну
- Ну иди, какни немного, я подожду..


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
NachinaushiyOver писал(а):
а куда это вставлять?

NachinaushiyOver писал(а):
Это чё такое?


[url=http://images.people.overclockers.ru/100571.png]#77
ссылка (50кб)[/URL]

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 17.11.2006
Откуда: Нижний Новгород
Спасибки, кнопка работает, а вот значка xp в Delphi 6 нету. Вот скрин. Да в общем то это не очень важно
http://img141.imageshack..us/img141/1377/10411077107910991084110fc8.png


Последний раз редактировалось NachinaushiyOver 24.11.2006 14:06, всего редактировалось 2 раз(а).

 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
NachinaushiyOver он есть только в Delphi7 и выше.
PS замени картинку на ссылку, по размерам нарушение правил.
PS PS дальнейшее обсуждение предлагаю перенести в асю или личку, дабы не разводить тут санта барбары.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 13.02.2004
Откуда: Чехия
Доброго вечера всем
Подскажите, как из Делфи обратиться к переменной другой программы. Попытаюсь обЪяснить понятней:
Работаю в программе (WorkNC), в этой проге открыт проэкт с которым работаю. Из меню WorkNC запускаю свою прогу написанную в Делфи (WorkNC остается открытым). Известно имя переменной WorkNC (например WNC_DOC_HTML_OUT = $WNCZONE/doc). Вопрос: как считать значение WNC_DOC_HTML_OUT в Делфи программе.

P.S. Если что непонятно написал - уточню. Помогите, пожалуйста, очень нужно. (можно дать ссылку на пример, постараюсь разобраться)

_________________
Лучше иметь пузо от пива, чем горб от работы.


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
George J
А файлы или мапированные в память файлы не подойдут?

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 76 из 116<  1 ... 73  74  75  76  77  78  79 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan