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

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



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я пробовал писать вот так вот:
ComboBox1.Items.Add(MyArray[i]);
Д выдаёт сообщение об ошибке.
ShIvADeSt. Вечером попробую твоё решение.

Всего записей: 483 | Зарегистр. 07-06-2004 | Отправлено: 08:03 08-08-2006
SERGE_BLIZNUK

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

Цитата:
ComboBox1.Items.Add(Format('%d,[MyArray[i]]));  

если не пройдёт - попробуй так:

Код:
 
  ComboBox1.Items.Add(FloatToStr( MyArray[i] ))
 

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 08:47 08-08-2006
RomanTim

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

Цитата:
ComboBox1.Items.Add(Format('%d,[MyArray[i]]));  

%d используется для форматирования целых, для чисел с плавающей запятой - FloatToStr как уже сказали или %f, %g, а вообще в справке довольно подробно расписаны шаблоны форматирования для Format

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 10:00 08-08-2006
dmit000



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
var
Form1: TForm1;
i: integer;
d: array [1..11] of real=(1.2 , 2.5 , 3.5 , 4.6 , 5, 6, 7, 8, 9, 10, 11);
 
implementation
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to 11 do
combobox1.Items.add(floattostr(d[i]));
//combobox1.Items.add(format('%g,[d[i]]));
 
end;
end.
 
Если как есть запустить прогу то:
1. Выдается предупреждение: for loop control variable must be simple...
    Чего не так
2. При выполнении combobox заполняется нормально кроме 1 и 4 строки
    Соответственно в первой он пишет 1,20000000000073
    в четвёртой пишет 4,59999999999854
    Что не так
Если закоментировать строку combobox1.Items.add(floattostr(d[i]));
и разкомментировать combobox1.Items.add(format('%g,[d[i]]));
вообще банан. Д пишет .... долго периписывать и нет счастья конкретно.
 
 
 
 
 
 

Всего записей: 483 | Зарегистр. 07-06-2004 | Отправлено: 16:12 08-08-2006
Pinocchio

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

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 16:26 08-08-2006
dmit000



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё дописал прогу
Окончательно и безповоротно
 
var
  Form1: TForm1;
  i: integer;
  d: array [1..11] of string=('1,2' , '2,5' , '3,4' , '4' , '5', '6', '7',
  '8', '9', '10', '11');
 
implementation
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if combobox1.text<>'' then
begin
edit1.text:=floattostr(2*(strtofloat(combobox1.text)))
end
else
ShowMessage('Выберите число');
end;
 
procedure TForm1.FormActivate(Sender: TObject);
begin
combobox1.text:='';
edit1.text:='';
for i:=1 to 11 do
combobox1.Items.add(d[i]);
 
end;
 
Всё работает. Спасибо всем.
 
Осталось победить предупреждение
for loop control variable must be simple...  
которое выдаётся на строку for i:=1 to 11 do
напишите что не так делаю.

Всего записей: 483 | Зарегистр. 07-06-2004 | Отправлено: 17:13 08-08-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
опиши і внутри процедуры, а не глобально
procedure TForm1.FormActivate(Sender: TObject);  
var i:integer;
begin
...
 
Добавлено:
и заполнение комбобокса наверно, лучше делать на Create формы, а не на Activate

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 17:33 08-08-2006
kly



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у тебя ругался на ComboBox1.Items.Add(Format('%d,[MyArray[i]])) судя по всему из-за нехватки кавычки, т.е. надо ComboBox1.Items.Add(Format('%d',[MyArray[i]]));
предупреждение for loop control variable must be simple... - хочет, чтобы ты использовал локальную переменную:
 
procedure TForm1.FormActivate(Sender: TObject);  
var
 j: Integer;
begin  
...
for j:=1 to 11 do  
 combobox1.Items.add(d[j]);  
end;
 
и лучше верхнии и нижнии границы массива задавать как Low(d) и High(d)
 
 

Всего записей: 9 | Зарегистр. 19-06-2006 | Отправлено: 17:39 08-08-2006
kzsergo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никак не могу вставить свой текст (пароль) в поле редактирования окна "Подключение удаленного доступа". Пишу следующий код:
 
Procedure TForm1.ButtonClik(Sender: TObject);
var q,w: hwnd;
      a:Pchar;
begin  
       c:='3112';
       q:=FindWindow('#32770',nil); //нашел дескриптор окна "Подключение удаленного  
                                                    доступа" прогой WinSight
       w:=FindWindowEx(q,0,'Edit',nil); //нашел место для вставки текста той же прогой
       GetWindowText(g,c,4);// вставляю текст  
end;
end.
 
Но ничего не происходит, т.е. мой текст в поле редактирования нужного мне окна не добавляется. Почему? Что нужно добавить или исправить?

Всего записей: 36 | Зарегистр. 14-07-2006 | Отправлено: 20:48 08-08-2006
SERGE_BLIZNUK

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

Цитата:
GetWindowText(g,c,4);// вставляю текст  

я абсолютный ноль в этом, но может всё-таки нужно SetWindowText ?

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 21:51 08-08-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kzsergo
SERGE_BLIZNUK
Начнем с того что дескриптор окна меняется.
И возвращает он тебе хендл хто знает чего.
И хоть
Цитата:
SetWindowText  

хоть  

Цитата:
GetWindowText
который кстати  

Цитата:
The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.
 
никак не устанавливает текст, тебе не поможет если ты неправильно нашел hendl.
Попробуй все таки пересмотреть идею установки пароля в диалоге.
Но если не передумаеш мой совет нужно перебирать окна верхнего уровня искать с текстом в ктором есть ключевая фраза диалога подключения, (так как в Caption еще добавляется имя подключения). И только потом искать дочерний эдит.

Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 23:24 08-08-2006
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RedPromo
 
начнём с того, что вы зря всё это объясняете мне - это kzsergo бьётся над проблемой.  
 

Цитата:
Начнем с того что дескриптор окна меняется.  

Какой дескриптор? вы о чём сейчас?

Код:
 
HWND FindWindow(
    LPCTSTR lpClassName,    // pointer to class name
    LPCTSTR lpWindowName     // pointer to window name
   );    
 
я не смотрел какой там класс у окна подключения (может и '#32770') и я не знаю, почему у kzsergo  не работает конструкция вида
q:=FindWindow(nil, 'Подключение удаленного доступа');  
но класс окна меняться не должен (имхо!)
 
в любом случае, просто для приличия должно быть после FindWindow проверка на то, что что-то нашлось:

Код:
 
  q:=FindWindow('#32770',nil);
  if q <> 0 then begin
     ....
  end;
 

и ещё - kzsergo в отладчике проходили? q и w не нулевые?

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 00:05 09-08-2006
ShIvADeSt



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

Цитата:
FindWindow('#32770',nil);

вернет хэндл первого окна с таким классом (кстати это хэндл любого диалогового окна), а насчет поиска по заголовку, а он уверен, что у него заголовок именно такой?


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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:20 09-08-2006
valerka78



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну пусть посмотрит какой заголовок у окна и ищет по заголовку.

Всего записей: 248 | Зарегистр. 16-01-2006 | Отправлено: 05:50 09-08-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно попробовать использовать WindowFromPoint, хотя бы чтоб узнать класс и родителей контролла

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 06:36 09-08-2006
dmit000



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем за советы
 
А как сделать так чтобы в строке
d: array [1..11] of string=('1,2' , '2,5' , '3,4' , '4' , '5', '6', '7', '8', '9', '10', '11');
программа сама считала сколько элементов в массиве?
//это я про число 11 в строке array [1..11]

Всего записей: 483 | Зарегистр. 07-06-2004 | Отправлено: 07:17 09-08-2006
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmit000
уважаемый kly ещё вчера вам сказал:
Цитата:
и лучше верхнии и нижнии границы массива задавать как Low(d) и High(d)


Код:
 
for j:=Low(d) to High(d) do  
 combobox1.Items.add(d[j]);  
end;  
 

 

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 08:38 09-08-2006
dmit000



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

Всего записей: 483 | Зарегистр. 07-06-2004 | Отправлено: 13:35 09-08-2006
kzsergo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне кажется, что моя программма написана почти правильно, единственный минус - это то, что текст не вставляется физически. Самое смешное, после выполнения программы, если воспользоваться прогой MySpy, то в первом поле редактирования MySpy (оно называется "Заголовок") вместо пустого значения (до выполнения моей программки) появляется заданное мной значение, оно скорее, я бы сказал вируальное, т.е. не физическое (нет моего текста его в поле редактирования окна "Подключение удаленного доступа" ). В моем случае функции SetWindowText и GetWindowText не подходят. А дескриптор окна "Подключение удаленного доступа" как и хэндл никогда не меняется.  

Всего записей: 36 | Зарегистр. 14-07-2006 | Отправлено: 15:25 09-08-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kzsergo
Ладно давай тогда может попробуеш как нормально
вот тебе еще совет
 

Цитата:
 
DWORD RasSetCredentials(
  LPCTSTR lpszPhonebook,
  LPCTSTR lpszEntry,
  LPRASCREDENTIALS lpCredentials,
  BOOL fClearCredentials
);
 

Есть така функция в WinAPI
А еще есть такая структура

Цитата:
 
typedef struct {  DWORD dwSize;  DWORD dwMask;  TCHAR szUserName[UNLEN + 1];  TCHAR szPassword[PWLEN + 1];  TCHAR szDomain[DNLEN + 1];
} RASCREDENTIALS, *LPRASCREDENTIALS;
 

 
А еще есть такой пример

Цитата:
 
ZeroMemory(&lpCred, sizeof(lpCred));
 
lpCred.dwSize = sizeof(lpCred);
lstrcpyn(lpCred.szUserName, "test", sizeof("test")/sizeof(TCHAR)+1);
lstrcpyn(lpCred.szPassword, "", sizeof("")/sizeof(TCHAR)+1);
lstrcpyn(lpCred.szDomain, "BANANA40", sizeof("BANANA40")/sizeof(TCHAR)+1);
lpCred.dwMask=RASCM_UserName | RASCM_Password | RASCM_Domain ;
 
res=RasSetCredentials(NULL, "mazy", &lpCred, 0);
if(res == 0)
    printf("Set Credentials to:\n%s\n%s\n%s\n\n",
      lpCred.szUserName,lpCred.szPassword,lpCred.szDomain);
else
    printf("Error: %u\n\n,",res);
 

Я думаю лучше пойти этим путем. А насчет десктипторов чето не то. Класс действительно не меняется а хендл каждый раз при запуске меняется. И прав ShIvADeSt он.

Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 16:56 09-08-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