Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Как правильно запросить имя пользователя?   Найти похожие ветки 

 
Eugem ©   (2006-11-12 01:30) [0]

Не получается запросить имя пользователя в программе.
Делаю так:
GetUserName(buf,lbuf);// получение имени пользователя

Имя пользователя записывается в buf. НО! Как только я пытаюсь обработать переменную buf или вывести её в текстовом виде в Edit-поле, то возникает ошибка при работе функции GetUserName.

Что не так. Подскажите, пожалуйста


 
Leonid Troyanovsky ©   (2006-11-12 02:13) [1]


> Eugem ©   (12.11.06 01:30)  

> Что не так. Подскажите, пожалуйста


А память для buf будет Пушкин выделять.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2006-11-12 12:35) [2]

> Eugem  (12.11.2006 1:30:00)  [0]

Лучше вежливо.
У тебя ошибка в 17 строке.


 
Eugem ©   (2006-11-12 12:51) [3]

procedure TForm1.FormActivate(Sender: TObject);
var name,TT:string;buf:PChar;lbuf,i:cardinal;
begin
    CoolTrayIcon1.IconVisible:=true;
    assignfile(setf,SetFile);
    reset(setf);
    while not(Eof(setf)) do begin  //чтение настроек программы из файла
    readln(setf,name);
    readln(setf,number) end;
    closefile(setf);

    GetUserName(buf,lbuf);// получение имени пользователя
    sbuf:=buf;
    if sbuf="0" then application.Terminate;

    TT:=sbuf[1];

    fname:=name;
    gloA:=0;
    numa:=StrToInt(number);
    gloss:=0;

end;

Вот так написал. Переменную вроде описал, значит память под нее выделяется. Подскажите может по-другому выделять надо?


 
Anatoly Podgoretsky ©   (2006-11-12 12:58) [4]

> Eugem  (12.11.2006 12:51:03)  [3]

В данном коде явных ошибок не наблюдается, но у тебя еще есть код.


 
Anatoly Podgoretsky ©   (2006-11-12 12:59) [5]

> Eugem  (12.11.2006 12:51:03)  [3]

Ой, уродски отформатировано, еще как есть, это Пушкин виноват.


 
Ketmar ©   (2006-11-12 13:05) [6]

>[4] Anatoly Podgoretsky(c) 12-Nov-2006, 12:58
>В данном коде явных ошибок не наблюдается
"как это?" (ц)

var name,TT:string;buf:PChar;lbuf,i:cardinal;
 GetUserName(buf,lbuf);

LVT совершенно верно протелепатировал. а товарищу автору надо в "надмозги", там ему надмозг отполируют.


 
Джо ©   (2006-11-12 13:08) [7]

> Переменную вроде описал, значит память под нее выделяется.

Неверное умозаключение. За разьяснениями, действительно, к Пушкину.


 
Anatoly Podgoretsky ©   (2006-11-12 13:09) [8]

> Ketmar  (12.11.2006 13:05:06)  [6]

Так я уже поправился, я сначал прочитал это как часть параметров. Оформление то кода далеко от идеального.


 
Джо ©   (2006-11-12 13:09) [9]

> Eugem ©

Тип PChar — это указатель на область памяти. Кою необходимо выделить самостоятельно. Например, функциями работы с димнамической памятью.


 
Anatoly Podgoretsky ©   (2006-11-12 13:10) [10]

> Джо  (12.11.2006 13:08:07)  [7]

Правильное, память под Переменную выделена.


 
Ketmar ©   (2006-11-12 13:11) [11]

>[10] Anatoly Podgoretsky(c) 12-Nov-2006, 13:10
>Правильное, память под Переменную выделена.
смени личность, перекинь ветку, а? ведь щаз запинаем беднягу. %-)


 
Джо ©   (2006-11-12 13:12) [12]

> [10] Anatoly Podgoretsky ©   (12.11.06 13:10)
> > Джо  (12.11.2006 13:08:07)  [7]
>
> Правильное, память под Переменную выделена.

Ну, я уже поправился. :)


 
Anatoly Podgoretsky ©   (2006-11-12 13:13) [13]

> Ketmar  (12.11.2006 13:11:11)  [11]

Рано еще. Там же неудобно будет.


 
Ketmar ©   (2006-11-12 13:14) [14]

>[13] Anatoly Podgoretsky(c) 12-Nov-2006, 13:13
>Рано еще. Там же неудобно будет.
что-то я поутру снисходительный. %-)


 
Anatoly Podgoretsky ©   (2006-11-12 13:16) [15]

> Ketmar  (12.11.2006 13:14:14)  [14]

А я с утра уже 5 кб текста на форумы отправил, 15 сообщений.


 
Ketmar ©   (2006-11-12 13:18) [16]

>[15] Anatoly Podgoretsky(c) 12-Nov-2006, 13:16
>А я с утра уже 5 кб текста на форумы отправил, 15 сообщений.
а я матерюсь злобно. без кофию жизни нет.


 
Eugem ©   (2006-11-12 14:21) [17]

TT:=sbuf[1]; - эта строка. Если её нет -код работает нормально, ошибок не возникает.

Как только пытаюсь сделать что-то с buf или sbuf, то возникают ошибки во время выполнения программы. Да, sbuf:string, а buf:PChar.

Помогите, плиз


 
Джо ©   (2006-11-12 14:28) [18]

:-|
Неужели ты ответы не читаешь?


 
Ketmar ©   (2006-11-12 14:30) [19]

>[18] Джо(c) 12-Nov-2006, 14:28
>Неужели ты ответы не читаешь?
нет, видимо. оно не умеет читать, только писать. чукча-программист.


 
Eugem ©   (2006-11-12 15:56) [20]


> нет, видимо. оно не умеет читать, только писать. чукча-программист.

Из того что написали... Кто говорит, что всё правильно. Кто говорит, что нужно выделять память. Напишите как память выделить


 
Ketmar ©   (2006-11-12 15:58) [21]

>[20] Eugem(c) 12-Nov-2006, 15:56
>Напишите как память выделить
вот здесь помогут: http://antigreen.org/bioreactor/

зыж quousque tandem?!!


 
MikePetrichenko ©   (2006-11-12 17:07) [22]

var
 Buf: array [0..254] of Char;
 BufSize: DWORD;
begin
 BufSize := 255;
 FillChar(Buf, BufSize, 0);
 GetUserName(Buf, BufSize);
 ....
end;


 
Eugem ©   (2006-11-12 17:28) [23]

Я вот так написал:
new(buf);
    GetUserName(buf,lbuf);// получение имени пользователя
    sbuf:=buf;


 
MikePetrichenko ©   (2006-11-12 17:40) [24]


> new(buf);

new для PChar??? Оригинально. А размер кто указывать будет, сколько того new нужно выделить?


 
Dmitrij_K   (2006-11-12 17:42) [25]

Для Pchar есть StrAlloc StrDispoce


 
MikePetrichenko ©   (2006-11-12 17:43) [26]


> Для Pchar есть StrAlloc StrDispoce

Для PChar и всего отсального (кроме типизированных указателей на записи, для которых подойдет New) есть GetMem, FreeMem, HeapAlloc, MemAlloc и т.п.
Рекомендую использовать native API функции управления памятью, так как меньше гемороя будет в будущем.


 
MikePetrichenko ©   (2006-11-12 17:46) [27]

А вообще, по-моему глупо использовать функции выделения/освобождения памяти для переменных, которые используются исключительно внутри функции и имеют сравнительно не большой фиксированный размер. Проще (и надежнее) обойтись обычным статическим массивом в стеке (локальная переменная функции).


 
Anatoly Podgoretsky ©   (2006-11-12 19:05) [28]

> MikePetrichenko  (12.11.2006 17:40:24)  [24]

Ничего оригинального, под PChar и выделит


 
Anatoly Podgoretsky ©   (2006-11-12 19:06) [29]

> MikePetrichenko  (12.11.2006 17:46:27)  [27]

Глупо вообще использовать массив, string полностью совместим с PChar


 
guav ©   (2006-11-12 19:17) [30]

Всё уже сказано, можно только добавить, сколько требуется выделить:
A buffer size of (UNLEN + 1) characters will hold the maximum length user name including the terminating null character. UNLEN is defined in Lmcons.h.
Из Jwa:
 UNLEN      = 256; // Maximum user name length


Напонмило.
http://www.delphimaster.ru/cgi-bin/nuts.pl?showpage=2
ветка Имя компьютера


 
MikePetrichenko ©   (2006-11-13 00:43) [31]


> Глупо вообще использовать массив, string полностью совместим
> с PChar

Тоже вариант. Но потребует явного задания длинны строки SetLength для передачи в GetUserName


 
guav ©   (2006-11-13 00:57) [32]

> [31] MikePetrichenko ©   (13.11.06 00:43)
> Но потребует явного задания длинны строки SetLength

"...а мне это не интересно! Просьба подсказать другие варианты." (с) Орешник

Это лучший вариант, string используется повеместно и работать с ним в отличии от массива удобно, вот и получать надо сразу в string.


 
Ketmar ©   (2006-11-13 00:59) [33]

>[32] guav(c) 13-Nov-2006, 00:57
>надо сразу в string.
а я всё по-привычке в массивы получаю. %-)


 
MikePetrichenko ©   (2006-11-13 01:00) [34]


> Это лучший вариант, string используется повеместно и работать
> с ним в отличии от массива удобно, вот и получать надо сразу
> в string.

Не спорю. Возможно не лучший (зависит от контекста программы), но уж 100% ясный и простой.


 
MikePetrichenko ©   (2006-11-13 01:02) [35]


> а я всё по-привычке в массивы получаю. %-)

та ну! Как ни странно, я тоже. Видимо это старость :(


 
Ketmar ©   (2006-11-13 01:36) [36]

>[35] MikePetrichenko(c) 13-Nov-2006, 01:02
>та ну! Как ни странно, я тоже. Видимо это старость :(
а за углом поджидает злой маразм. эх, не бывать нам как ЮЗ, ИШ, АП...


 
MikePetrichenko ©   (2006-11-13 02:49) [37]


> Как правильно запросить имя пользователя?

И всетаки, IMHO, лучше подойти и вежливо спросить "Как Вас зовут?"


 
Ketmar ©   (2006-11-13 02:52) [38]

>[37] MikePetrichenko(c) 13-Nov-2006, 02:49
>И всетаки, IMHO, лучше подойти и вежливо спросить "Как Вас
>зовут?"
не забывая, что доброе слово и пистолет намного более действенны, нежели просто доброе слово.


 
Anatoly Podgoretsky ©   (2006-11-13 07:38) [39]

> MikePetrichenko  (13.11.2006 0:43:31)  [31]

А в массиве разве не надо явного задания длины, при том два раза



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.062 c
5-1144658519
megabyte-ceercop
2006-04-10 12:41
2006.12.03
Подсветка синтаксиса


2-1163458328
santey
2006-11-14 01:52
2006.12.03
ShowMessage


15-1163079164
Access
2006-11-09 16:32
2006.12.03
Восстановить "опции" explore.exe в реестре


1-1161172159
AlexEgorov
2006-10-18 15:49
2006.12.03
Почему в всех дельфи приложений не полное системное меню,


15-1163143166
Орион
2006-11-10 10:19
2006.12.03
Служба тех. поддержки американского хостинга





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский