Ему чуть другое нужно, как я понял. Типа клиент-сервер считывание и запись из файлов.
Да я понял, что ему надо. Но чтобы так сделать, нужно чтобы и в той программе что пишет и в той, что читает, было изначально это реализовано. А если у него чужой exe, то это значит, что посетил Отсос Петрович. Относительно:
Максим писал(а):
Правда тут сразу есть мини проблема - нужно сделать так, чтобы эта dll была одной в памяти, а вот это не знаю как под Дельфей реализуемо.
Вот - можешь собрать и погонять.
DLL 1. DemoMmf.dpr
Код:
library DemoMmf;
uses SysUtils,Classes, MmfUtl in 'MmfUtl.pas';
exports GetValue, SetValue; end.
2. MmfUtl.pas
Код:
unit MmfUtl;
interface
uses Windows, SysUtils;
function GetValue: Integer; stdcall; procedure SetValue(I: Integer); stdcall;
implementation
var Handle: THandle; Value: ^Integer;
function GetValue: Integer; begin Result:= Value^; end;
procedure SetValue(I: Integer); begin Value^:= I; end;
initialization Handle:= CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(Integer), 'bla-bla-bla_Demo'); if Handle = 0 then raise Exception.Create('Проблема, однако, с созданием...'); Value:= MapViewOfFile(Handle, FILE_MAP_WRITE, 0, 0, SizeOf(Integer)); finalization UnmapViewOfFile(Value); CloseHandle(Handle); end.
procedure TForm1.btnGetClick(Sender: TObject); begin Label1.Caption:= IntToStr(GetValue); SpinEdit1.Value:= StrToInt(Label1.Caption); end;
procedure TForm1.btnSetClick(Sender: TObject); begin SetValue(StrToIntDef(SpinEdit1.Text, 0)); BtnGet.Click; end;
Бросить на форму контролы из объявлений, скопировать код в обработчики, откомпилировать и наслаждаться.
Запускаешь нескольких копий, в одной в SpinEdit меняешь значение, устанавливаешь его кнопочкой BtnSet, а в других запущенных экземплярах топчешь кнопочку BtnGet и смотришь результат.
Примерчик простенький, но суть отображает.
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
_SGK Ну да, такую идею я и предлагал. Только предлагал без мапирования. А ты уверен, что мастдай будет загружать эти dll в одну и ту же ячейку памяти - просто в свое время уже натыкался, что то второй раз не грузит в память, а через некоторое время может создать дополнительную копию в памяти.
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
_SGK Ну да, типа того. Только это ты не мне говори, если мне нужно будет, я и по другому привяжусь только к первой копии длл в памяти. Причем оказывается та же самая вещь, что когда то была доступна, в С++ 5.02, так же доступна и в Дельфях (ну чтоб длл после первой загрузки не выгружалась из памяти).
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Давненько не заглядывал. В универе загрузили и сессия скоро... Щас вот снова решил повозиться.
_SGK писал(а):
Создай два звука сразу под конкретного человека (его скорость) в двух экземплярах TMemoryStream, а потом просто проигрывай нужный, с помощью sndPlaySound.
А как? Я попробовал создвать TMemoryStream, и проигрывать с помощью sndPlaySound из специальной отдельной процедуры, но видимо неправильно сделал: прога виснет. А эконмия времени должна получиться .
Member
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Smolensk
Здравствуйте ...
Так как скоро сессия (:) ) не могли бы вы помочь в решении задачки:
Нужно обьеденить два отсортированных (программа внизу) одномерных массива (через процедуры) и затем его отсортировать (это я думаю сам смогу сделать, главное объеденить) ...
var Form1: TForm1; i,m,k,j,b,a:integer; implementation
{$R *.dfm}
procedure TForm1.BitBtn5Click(Sender: TObject); begin close; end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var u:integer; begin for i:=0 to 9 do begin u:=random(50)-25; StringGrid1.cells[i,0]:=inttostr(u); StringGrid1.cells[i,1]:=''; end; end;
procedure TForm1.BitBtn2Click(Sender: TObject); begin m:=9; for i:=0 to 9 do begin StringGrid1.cells[i,1]:=StringGrid1.cells[i,0]; end; for i:=0 to m-1 do begin k:=i; for j:=i+1 to m do if strtoint(StringGrid1.cells[j,1])<strtoint(StringGrid1.cells[k,1]) then k:=j; if k>1 then begin a:= strtoint(StringGrid1.cells[i,1]); StringGrid1.cells[i,1]:=StringGrid1.cells[k,1]; StringGrid1.cells[k,1]:=inttostr(a); end; end; end;
procedure TForm1.BitBtn3Click(Sender: TObject); begin m:=9; for i:=0 to 9 do begin StringGrid1.cells[i,2]:=StringGrid1.cells[i,0]; end; for i:=1 to m do BEGIN for j:=1 to m-1 do if strtoint(StringGrid1.cells[j,2])>strtoint(StringGrid1.cells[i,2]) then begin a:=strtoint(StringGrid1.cells[i,2]); StringGrid1.cells[i,2]:=StringGrid1.cells[j,2]; StringGrid1.cells[j,2]:=inttostr(a); end; end; end;
end.
_________________ Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
Rev@n Тебе полегче или потяжелее? А так, куда сохранять объединенный массив. Если можно сохранять в StringGrid, то что тебе мешает написать к примеру так.
Код:
m := 9; for i:=0 to 9 do begin StringGrid1.cells[i,3]:=StringGrid1.cells[i,1]; StringGrid1.cells[i+M+1,3]:=StringGrid1.cells[i,2]; end;
Вот и скопируешь свои массивы Только я не совсем понимаю задание - зачем вообще это нужно в итоге? У тебя получиться массив, где каждый нечетный элемент задублирован с каждым следующим четным (ну после уже последующей сортировки)
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Smolensk
О, спасибочки ...
Максим писал(а):
У тебя получиться массив, где каждый нечетный элемент задублирован с каждым следующим четным (ну после уже последующей сортировки)
Да все-равно что получиться главное показать, что они объединены - защита лабы ...
_________________ Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|
Я попробовал создвать TMemoryStream, и проигрывать с помощью sndPlaySound из специальной отдельной процедуры, но видимо неправильно сделал: прога виснет.
procedure TForm1.FormDestroy(Sender: TObject); begin msD.Free; msP.Free; end;
procedure TForm1.Button1Click(Sender: TObject); begin msP.Clear; // Перед созданием нового звука обязательно очистить // или добавить в gkgSndUtl, сразу после begin сточку: MS.Clear; SndCreate(msP, sndFrequency, sndDFP, sndVolume); // Создаем звук для точки. msD.Clear; // Перед созданием нового звука обязательно очистить. SndCreate(msD, sndFrequency, sndDFP * 3, sndVolume); // Создаем звук для тире. // Начало передачи ;) SndPlay(msD); // тире Sleep(sndDFP); // пауза SndPlay(msP); // точка Sleep(sndDFP); SndPlay(msP); Sleep(sndDFP); SndPlay(msD); Sleep(sndDFP); SndPlay(msD); Sleep(sndDFP); SndPlay(msP); end;
Я смотрел из любопытства одну прогу, дык там обработка была реализована посимвольно – нажал клавишу, прога пропищала что надо. Но если ты хочешь большую точность, то ИМХО нужно обрабатывать сразу предложение. К примеру, ввел чупс: привеД медвеД. Ты должен всю строку разобрать на последовательность команд (точек, пауз, тире), помещая все это дело, к примеру, в список, а потом проиграть весь список команд одним махом. Ессно продолжительность тире и пауз рассчитывать от продолжительности звучания точки.
Благодарю. Я применил к первому варианту, разобрался что к чему. Теперь точка и тире создаются 1 раз. Там я заколебался с размножившимися процедурами и сделал большинство переменных глобальными . Теперь пахает получше. Как вот только в старый вариант проги добавлять паузу в TMemoryStream? Так как не хочу
_SGK писал(а):
весь список команд одним махом.
,
а хочу к созданным точке и тире "прилепить" паузы в конец, может поточнее будет.
Member
Статус: Не в сети Регистрация: 21.12.2006 Откуда: Воронеж
Здарова народ))) Кто нидь работал с модулем RegExpr? Мне нужно сделать выделять {} скобки, но тока в них всегда че то есть(текст или цифры). Вроде при описании регулярного выражения любой символ это ".", но она почему то не работает? Мож кто сталкивался с такой проблемой?
Member
Статус: Не в сети Регистрация: 24.12.2004 Откуда: Ставрополье
Посоветуйте компоненты для придания прогам красивого внешнего вида Добавлено спустя 2 минуты, 53 секунды Посоветуйте компоненты для придания прогам красивого внешнего вида
_________________ Ставрополье Оверклокерс http://forums.overclockers.ru/viewtopic.php?t=125746 -= World Of Tanks =- (для связи Ватс Ап +7-903-418-03-43)
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
FatumNNM А например какого вида? Если хочется под виндовоз с его скинами, то можно с помощью одного встроенного компонента в Дельфи (начиная с седьмой) придать вид виндовоза, а если хочется чего-то более другого, то или рисуй сам, либо пользуй скинпаки всякие. Мне например нравиться DynamicSkinForm
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 24.12.2004 Откуда: Ставрополье
Максим хочеться красивые эффекты добавить в прогу, например как в офисе 2003
_________________ Ставрополье Оверклокерс http://forums.overclockers.ru/viewtopic.php?t=125746 -= World Of Tanks =- (для связи Ватс Ап +7-903-418-03-43)
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
FatumNNM НУ гм, тады тебе просто каждый такой эффект придется искать.
Для меню - одни компоненты, для скинов другие. Чтоб полностью совмещенные были - гм, не знаю наверное таких.
Просто красивые менюшки - ну в том же DynamicSkinForm есть, но чтоб еще с эффектами - не видел.
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Максим хочеться красивые эффекты добавить в прогу, например как в офисе 2003
Максим
Максим писал(а):
НУ гм, тады тебе просто каждый такой эффект придется искать.
Гы, ну вы - мужики даете... Используются: TActionManager, TActionMainMenuBar и TActionToolBar. Соответственно для ActionManager свойство Style установить в XPStyle. Для ActionMainMenuBar смотреть свойства AnimateDuration и AnimationStyle. Прямо в Demos примеры лежат: Demos\ ActionBands.
Member
Статус: Не в сети Регистрация: 24.12.2004 Откуда: Ставрополье
Максим и _SGK Благодарю. Не подскажете сайт с компонентами с компонентами для сабжа ?
_________________ Ставрополье Оверклокерс http://forums.overclockers.ru/viewtopic.php?t=125746 -= World Of Tanks =- (для связи Ватс Ап +7-903-418-03-43)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения