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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

Dim2004

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

Цитата:
2)можно ли как-то уменьшить размер конечного exe-файла?

Тынц.
 

Цитата:
при использовании ассемблерных комманд чтения/записи в порт - in/out выскакивает ошибка Priveleged instruction

Логично. Все нормальные операционки прямой доступ к железу из пользовательских программ запрещают. Приятно, что и Винда движется в том же направлении .

Всего записей: 222 | Зарегистр. 11-05-2004 | Отправлено: 18:52 18-08-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, научите. ShellExecute(Handle,'explore', 'E:\',nil,nil,SW_RESTORE);
Как можно букву сидирома возвратить, если он ни Е:\?

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 10:32 19-08-2005
SergeBS



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

Цитата:
подсоединил вместо джойстика переменные резисторы и написал программку, которая изменяет громкость звука в соответствии с положением резистора - получился вполне удачный регулятор громкости

Есть куча звуковух,в которых на плате разъем с 4 лапами - для 3 кнопок
"Тише","Громче", "Вкл-выкл (Mute)". Посмотри, может зря старался .
 

Цитата:
при использовании ассемблерных комманд чтения/записи в порт - in/out выскакивает ошибка Priveleged instruction (как в Delphi так и в VC++) можно ли как-то получить привелегии на использование этих комманд,

Куча разных библиотек позволяет обращаться под любой Win к портам ввода-вывода, памяти и т.п. Например WinIo. Или ройся в MSDN - для джойстика так и набери joystick. Там и примеры на C++ есть - DirectX.
Или вот:
 
Как использовать Joystick  
--------------------------------------------------------------------------------
Автор: http://www.swissdelphicenter.ch  
uses
  MMSYSTEM;
var
  MyJoy: TJoyInfo;
  ErrorResult: MMRESULT;
begin
  ErrorResult := joyGetPos(joystickid1, @MyJoy);
  if ErrorResult = JOYERR_NOERROR then
  begin
    TrackBar1.Position := MyJoy.wypos;
    TrackBar2.Position := MyJoy.wxpos;
    RadioButton1.Checked := (MyJoy.wbuttons and joy_button1) > 0;
    RadioButton2.Checked := (MyJoy.wbuttons and joy_button2) > 0;
  end
  else
    case ErrorResult of
      MMSYSERR_NODRIVER: ShowMessage('No Joystick driver present');
      MMSYSERR_INVALPARAM: ShowMessage('Invalid Joystick Paramameters');
      JOYERR_UNPLUGGED: ShowMessage('Joystick is Unplugged');
    else
      ShowMessage('Unknown error with Joystick');
    end;
end;
Проект Delphi World © Выпуск 2002 - 2004  
 

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 11:46 19-08-2005
Dim2004

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

Цитата:
Как можно букву сидирома возвратить

Перебирать с помощью GetDriveType() с 'C:\' по 'Z:\'. Тебя интересует DRIVE_CDROM (не забывай, что он может быть не один ). По-моему, был пример в демках...

Всего записей: 222 | Зарегистр. 11-05-2004 | Отправлено: 11:46 19-08-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dim2004
Слушай, а поточнее можеш написать? Как это написать?
Я просто в танке)

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 13:02 19-08-2005
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM
Не туда роешь.
procedure TForm1.Button1Click(Sender: TObject);
var
  w: dword;
  Root: string;
  i: integer;
begin
  w := GetLogicalDrives;  
  Root := '#:\';
  for i := 0 to 25 do
  begin
    Root[1] := Char(Ord('A') + i);
    if (W and (1 shl i)) > 0 then
      if GetDriveType(Pchar(Root)) = DRIVE_CDROM then
        Form1.Label1.Caption := Root;
  end;
end;
Проект Delphi World © Выпуск 2002 - 2004  

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 13:18 19-08-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeBS
Спасибо! всё заработало. Только открываются все Цдромы.
 
Добавлено:
Но всё равно, большое спасибо!!! Это я сам сделаю.

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 14:34 19-08-2005
2Polkan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема такая.
 
Имеется комплнент SpinEdit (это тот, который с выбором цифры).
При его редактирвоании происходит примерно следующее (вкратце написал):
 
procedure TMainForm.SpinEditChange(Sender: TObject);
begin
 if SpinEdit.Text = '' then SpinEdit.Value := 0;
 Label.Caption := IntToStr(SpinEdit);
end;
 
Но если при работе нажать Delete в СпинЭдите, возникает проблема: ругается, что '' (пустая строка) не является целым числом :(.  
 
Вроде сделал проверку, что если оно равно '' то оно становится равынм нулю...  
 
Добавлено:
Проблему почти решил, но... если двойным щелчком выделить число и нажать любую цифру, н-р, 1, будет не 1 а 10... Странно.
 
Для примера предлагаю небольшой проект, который десонстрирует эту ошибку :)  
http://www.webfile.ru/470646

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



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть строка (около 90 символов).
 
Нужно произвольно перемешать символы в строке. Делаю следующее:
 
var
 i, a, b: integer;
 s: string;
 a1, b1: char;
begin
for i:=0 to 50 do begin
  a:=Random(Length(s)+1);
    a1:=s[a];
  b:=Random(Length(s)+1);
    b1:=s[b];
  s[a]:=b1;
  s[b]:=a1;
end;

 
При запуске цикла в строках, выделенных жирным шрифтом возникает ошибка обращения к памяти. Если сделать цикл, например, от 0 до 10, то все проходит нормально. :\  
 
Подскажите, пожалуйста, в чем проблема.

----------
Never put off till tomorrow what can be put off till day after tomorrow just as well

Всего записей: 3119 | Зарегистр. 20-07-2005 | Отправлено: 11:16 21-08-2005
2Polkan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Larry
а рэндом разве не недо "обработать", вроде он дробные числа генерирует...

Всего записей: 435 | Зарегистр. 20-11-2004 | Отправлено: 11:44 21-08-2005
Larry



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

Цитата:
вроде он дробные числа генерирует...

Разве?

----------
Never put off till tomorrow what can be put off till day after tomorrow just as well

Всего записей: 3119 | Зарегистр. 20-07-2005 | Отправлено: 11:54 21-08-2005
2Polkan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Блин, с бэйсиком перепутал :).

Всего записей: 435 | Зарегистр. 20-11-2004 | Отправлено: 13:20 21-08-2005
Dim2004

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

Цитата:
Подскажите, пожалуйста, в чем проблема.

В нежелании 5 минут подумать. Random(Length(s)+1) имеет право выдать 0, и он его выдаёт на первом же обращении. Потом ты записываешь какую-то муть в s[0]... результат на лице. Следует написать Random(Length(s)) + 1.

Всего записей: 222 | Зарегистр. 11-05-2004 | Отправлено: 13:14 22-08-2005
ShIvADeSt



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

Цитата:
В нежелании 5 минут подумать. Random(Length(s)+1) имеет право выдать 0, и он его выдаёт на первом же обращении. Потом ты записываешь какую-то муть в s[0]... результат на лице. Следует написать Random(Length(s)) + 1.

Ты перед первым вызовом Random напиши Randomize, и потом считай как часто у тебя вначале нули будут выпадать. А вот что конкретно ты хотел я не понял. s[0] какую муть ты сюда писал? Здесь хранится длина строки s и борланд туда не рекомендует ничего писать (по крайней мере в Паскале так было).

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

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

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

Цитата:
Ты перед первым вызовом Random напиши Randomize, и потом считай как часто у тебя вначале нули будут выпадать.

Ну, это не ко мне, я просто объясняю тов. Larry, почему у него AV лезут. Кроме того, даже с Randomize вероятность выпадения 0 равной нулю не становится.
 

Цитата:
s[0] какую муть ты сюда писал?

Я? Никакую . А вот код от тов. Larry
 
[code]a:=Random(Length(s)+1);
s[a]:=b1;[code]
 
очень даже запросто запишет, если a=0.

Всего записей: 222 | Зарегистр. 11-05-2004 | Отправлено: 20:45 23-08-2005
Larry



Moderator
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Dim2004, спасибо. Действительно, сглючил я. По поводу

Цитата:
Ты перед первым вызовом Random напиши Randomize, и потом считай как часто у тебя вначале нули будут выпадать.

Я привел только фрагмент кода. У меня перед вызовом стоял Randomize, но нолики, как видно, попадались частенько.

----------
Never put off till tomorrow what can be put off till day after tomorrow just as well

Всего записей: 3119 | Зарегистр. 20-07-2005 | Отправлено: 20:53 23-08-2005
ShIvADeSt



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

Цитата:
Ну, это не ко мне, я просто объясняю тов. Larry, почему у него AV лезут. Кроме того, даже с Randomize вероятность выпадения 0 равной нулю не становится.

Я и не утверждал, что вероятность станет равной нулю Я все таки немного Паскаль знаю .

Код:
 
a:=Random(Length(s)+1);  
s[a]:=b1;
 

угу баг заключается в следующем, что если рандом возвращает ноль, то при попытке вызова a1:=s[a] где а=0 в переменную типа char пишется не символ, как должно а ЧИСЛО. Естественно AV.  
Как сказал Dim2004

Цитата:
 Следует написать Random(Length(s)) + 1.

А еще лучше (ИМХО и правильнее) вычисление Length(s)+1 поместить в переменную и потом рандом уже вызывать относительно нее.
Кстати еще баг нашел в a:=Random(Length(s)+1); результат может возвратить значение БОЛЬШЕЕ чем длина строки, тогда при попытке прочитать символ за пределами массива (а строка это массив символов) так же может выдать AV.

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

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может я чего не понял, но если вместо  

Код:
a:=Random(Length(s)+1);  

записать

Код:
a:=Random(Length(s)-1)+1;  

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

Всего записей: 2184 | Зарегистр. 12-01-2005 | Отправлено: 02:18 24-08-2005
ShIvADeSt



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

Цитата:
a:=Random(Length(s)-1)+1;  
то и нуля не будет и за пределы строки не выскочишь.  
Если я все же чего не понял, то не пинайте сильно.

И никогда не получишь последний символ (просто надо читать хелпы хоть иногда)
random(x) возвращает число от 0 до х-1 включительно. Поэтому согласно этому максимально возвращаемый результат a:=Random(Length(s)-1)+1 будет равен length(s)-1

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:40 24-08-2005
crash_rider

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет! я тут не давно, но вопросик возник тут !
Есть 5 форм! их нужно сделать (все 5 форм) поверх всех окон!
пробывал и API средствами и Delphi не фига!  
Если делать 1 форму поверх, то все работает если делаеш 5 то.....
При запуске все работает все 5 фйорм на верху, но стоит только хоть одну форму переместить по экрану все кранты
Уже бьюсь над этим вопросм 4 мес

Всего записей: 9 | Зарегистр. 23-08-2005 | Отправлено: 05:21 24-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