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

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

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

ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:52 20-04-2006 | Исправлено: ShIvADeSt, 02:02 30-06-2006
31416

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
Заменил я свой sz.Push(z); и  z:=sz.Pop; на  
asm
  push z;
end;
и
 asm
  pop z;
end;
 
соответсвенно вот что инетерсно pop z - что в 1-м что во 2 -м случае не хочет работать, а push работает в обоих. Это если z:array of integer а не ^integer как в твоем примере.Хотя не совсем понятно чем они отличается ведь по сути то  z:array of integer и естьуказатель на integer. (Или все не так просто?) Почему тогда компилятор не хочет его pop-нуть )))
 
Добавлено:
А вот что еще я обнаружил:
если описать так то pop работает!!!:
 
type
  m = array of integer;
var
  z:m;
 
но при этом появляется другая проблема
 z:=allocmem(n); - первый раз когда вызываеш все ок
вычисления с z
push z
 z:=allocmem(n); - а 2-й раз выдает ошибку invalid pointer operation отчего бы это??
вычисления с z
pop z //работает!!!

Всего записей: 172 | Зарегистр. 19-07-2005 | Отправлено: 23:36 24-04-2006
Sleepwalker



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

type
  m=array of integer;
var
  z:^m;
procedure rec(i:integer);
begin
  new(z);
  setlength(z^,3);
  z^[0]:=random(10);z^[1]:=random(90)+10;z^[2]:=random(899)+100;
  form1.memo1.Lines.Add(inttostr(i)+'-'+inttostr(z^[2]+z^[1]+z^[0]));
asm
  push z;
end;
  if i<10000 then rec(i+1);
asm pop z;end;
  form1.memo1.Lines.Add(inttostr(i)+'-'+inttostr(z^[2]+z^[1]+z^[0]));
  dispose(z);
end;

работает на ура. насчет релиза памяти 100% не могу сказать, но, судя по показаниям системы, все освобождается нормально.
 
а ты уверен, что так, как ты работаешь, можно работать с динамическими массивами?
вообще, там есть функция setlength, которая занимается выделением памяти. это раз. Два: в функции allocmem указывается количество байт, а тип integer у нас так-то 4-х байтный

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 10:26 25-04-2006
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Налетел на вроде простую задачку, но как сделать - не приходит в голову .
Есть - кучка из 15-20 3-значных чисел типа 111, 112, 221 ... Каждому числу соответствует строка, его расшифровывающая. Надо - как-то вывести это безобразие попарно со скроллингом по числам, чтобы можно было прочитав описание, выбрать нужное число. Проблема в том, что строки расшифровки - разные по длине (от 20 до 300 символов), надо как-то разрезать/переносить длинные строки. Предложите мысль, как такое соорудить.

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 12:11 25-04-2006
valerka78



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeBS
А почему не сделать описание где-то сбоку? Т.е. выводить попарно с сокращенным описанием (или там порядковым номером), а при клике рядом в, допустим, Мемо, выводить полное описание?

Всего записей: 248 | Зарегистр. 16-01-2006 | Отправлено: 12:39 25-04-2006
dyr farot

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можно использовать TListView с OwnerDraw = true и в OnDrawItem рисовать строку (DrawText -- в ней можно установить влаг переноса) со смещением на длину числа (TextWidth у TCanvas) а высоту строчки устанавливать OnMeasureItem (TextHeight у TCanvas).

Всего записей: 697 | Зарегистр. 03-08-2004 | Отправлено: 12:41 25-04-2006
YuRRiX

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
2 Sleepwalker  
 
если Вы имели в виду так:
 
ShellExecute(GetDesktopWindow,'open',
                    'same_program.exe',nil,
                    'path2program',SW_Normal);
 
SetWindowPos(FindWindow(nil,'same_program_name'),
              HWND_TOP,
              GetSystemMetrics(SM_CXFULLSCREEN)-263,
              GetSystemMetrics(SM_CYFULLSCREEN) + GetSystemMetrics(SM_CYCAPTION)-319,
              263, 319,SWP_SHOWWINDOW);
 
то ничего не вышло...

Всего записей: 31 | Зарегистр. 07-02-2006 | Отправлено: 13:13 25-04-2006
SergeBS



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

Цитата:
 
 А почему не сделать описание где-то сбоку? Т.е. выводить попарно с сокращенным описанием

Эти 30-300 символов - и есть сокращенно .  
 
dyr farot
Идею понял, но как-то оно то ли сложновато, то ли запутанно. Но в эту сторону посмотрю. Спасибо

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 13:49 25-04-2006
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuRRiX
раз не вышло - значит что-то не так делаешь. сотни раз делал подобную процедуру вплоть до поиска невидимых полей на формах и проблем особых не было.
Это раз. Два: что именно не вышло? программа запустилась?
у меня эта строчка:
setwindowpos(findwindow(nil,'Form1'),HWND_BOTTOM,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE+SWP_SHOWWINDOW);
стработала нормально. Тебе надо только BOTTOM на TOP заменить.

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 14:46 25-04-2006
YuRRiX

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В том то все и дело, что программы запускаются и работают, но окно программы не отабражается! я думал, что это я наплутал в приложениях, и решил запускать так:
[cmd /c same_program.exe] -то есть как отдельный процесс! и все равно нет ни окна cmd ни окна моей проги. это значит особенность сервиса, встроенного в делфи...
пробывал запускать так:
---------------------------------------------------------------------
function ExecFile(fName: string; param: string): byte;
var
  si : Tstartupinfo;
  p : Tprocessinformation;
begin
if FileExists(fName) then result:=e__UnKnown else result:=e__FileNotFound;
Try
FillChar( Si, SizeOf( Si ) , 0 );
With Si do begin
  cb := SizeOf( Si);
  dwFlags := startf_UseShowWindow;
  wShowWindow := 4;
end;
Createprocess(nil,Pchar(fName+' '+param),nil,nil,false,Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
except on exception do exit end;
result:=e__succes;
end;
----------------------------------------------------
те же проблемы, нет окна...

Всего записей: 31 | Зарегистр. 07-02-2006 | Отправлено: 14:57 25-04-2006
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuRRiX
эээ.. пардон, если у программы нет окна, то что ты собираешься показывать? наличие процесса не обязательно означает наличие окна приложения.

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 15:01 25-04-2006
YuRRiX

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
если программу запускать ручками, или из другой программы, то окно есть! А из сервиса - нет!

Всего записей: 31 | Зарегистр. 07-02-2006 | Отправлено: 15:33 25-04-2006
vserd

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

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

А это помоему так и задумано. Там нужно выставлять флажок чтобы взаимодействовать с Desktop пользователя.  

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 15:57 25-04-2006
YuRRiX

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Огромное ПАСИБА!




По ПМ подобное

Всего записей: 31 | Зарегистр. 07-02-2006 | Отправлено: 16:08 25-04-2006 | Исправлено: ShIvADeSt, 02:05 26-04-2006
31416

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker ну вообщем ты все разрулил ))) так что спасибо.

Всего записей: 172 | Зарегистр. 19-07-2005 | Отправлено: 22:24 25-04-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, допустим, загрузил я на на форму html страницу (через webbrowser, например, но это не важно), а там - 5 эдитов. Как мне программно забить в них текст, который хранится в моих пяти эдитах?
Т.е. чтобы текст моего первого эдита скопировался в первый эдит html страницы.
 
 
И ещё. На этой html странице есть кнопка. Как её можно программно нажать?
 
Благодарю.

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 08:51 26-04-2006
Sleepwalker



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
reenoip
этого тебе должно хватить:

 
var
  doc:IHTMLDocument2;
  ielement:IHTMLElement;
  i:integer;
  inp:IHTMLInputElement;
  subm:IHTMLElement;
begin
 //забираем интерфейс документа
  wb1.Document.QueryInterface(IID_IHTMLDocument2,doc);  
//идем по всем элементам документа
  for i:=1 to Doc.all.Get_length do begin
//получаем собственно сам элемент.
  doc.all.item(i-1,0).queryinterface(IHTMLElement,ielement);
    if assigned(iElement) then begin
      iElement.QueryInterface(IHtmlInputElement,inp);
      if assigned(Inp) then
      begin
        //если это эдит с именем field3 - записываем туда значение
        if inp.name='field3' then inp.value:='MyVal';
//если это кнопка с именем submit - нажимаем ее.
        if inp.name='Submit' then
        begin
          ielement.QueryInterface(IHtmlElement,subm);
          subm.click;
        end;
      end;
    end;
  end;
...........

возможны варианты, тут кому как удобнее.
 
Добавлено:
можешь сюда еще заглянуть.

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 11:43 26-04-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На всякий случай, продублирую здесь:
 
В общем, для тех, кто хочет реализовать отправку sms с помощью своей программы...  
У меня есть идея.  
Не думаю, что она нова, но всё же.  
 
Пойдём по порядку:  
 
1. _http://www.beonline.ru/portal/comm/send_sms/simple_send_sms.sms - на этой странице можно отправить sms на билайн (сообщение доходит до адресата практически мгновенно). И есть защитный код. Он обновляется при каждом рефреше. НО! Защитный код можно узнать, причём - элементарно. Нужно всего лишь посмотреть "свойства" картинки (либо - клик правой кнопкой, либо - посмотреть данные гифа в уже загруженной страничке). Допустим, сейчас у меня показывается картинка с кодом "5009": _http://www.beonline.ru/servlet/send/confirm_code/KNL6WcKpkX.gif  
 
2. В нашем случае имя гифа - "KNL6WcKpkX" - и есть тот самый код. Имя можно скопировать (не думаю, что это проблема). Главный косяк в том, что эдит ввода защитного кода имеет своё ограничение - позволяет ввести всего 4 символа (т.е. напрямую - вставкой - код не введёшь).  
 
3. Здесь уже ответили, как можно ввести все необходимые данные в эдиты html страницы (например - номер телефона, текст сообщения) и имитировать нажатие кнопки ("Отправить"). Остаётся только обойти защиту, и всё.  
 
Пути отхода:  
- можно сделать кейген (что для меня не представляется возможным);  
- можно попробовать обойти ограничение на ввод 4-х символов.  
 
 
 
 
А теперь вопрос к тем, кто шарит больше и лучше меня  
Реально ли такое вообще реализовать, или я пытаюсь объять необъятное?

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 12:26 26-04-2006
OdesitVadim



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

Цитата:
либо - посмотреть данные гифа в уже загруженной страничке). Допустим, сейчас у меня показывается картинка с кодом "5009": _http://www.beonline.ru/servlet/send/confirm_code/KNL6WcKpkX.gif  

неполучиться
Берём этот адрес, бросаем в адресную строку. Видим картинку. Теперь нажимаем пару раз "обновить" и видим, что картинка меняется
Скорее всего, нужно куки читать.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 13:26 26-04-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim, фак, точняк...
Ну, и ладно тогда, фиг с ним, с сервисом этим...
Вырасту - подумаю ещё раз )))

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 17:32 26-04-2006
Dmitry

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArtemiyUO
 
Simple XML не пробовал?
http://mv.rb.ru

Всего записей: 81 | Зарегистр. 24-09-2003 | Отправлено: 08:06 27-04-2006
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru