![]() |
Delphi | PChar into Cardinal
Чо-т голова совсем не варит... Как из PChar (или PAnsiChar) "сделать" тип Cardinal/Integer? Ну, к примеру, когда посылаешь сообщение WM_SETTEXT в lParam надо впихнуть указатель на строку, а в функции SendMessage lParam объявлен как Integer. Аналогично если действовать через TControl.Perform, то там lParam объявлен как Cardinal.
|
Код:
var A : Cardinal; |
Netscaper
Ура! В Дельфи оказывается тоже есть преобразование типов как в Си. Ура, ура! А почему я только щас об этом узнал? |
Вложений: 1
Секундочку... Но если действовать так, то возникает Exception (в момент вызова Application.Run)
Код:
Form1.Controls[i*11].SetTextBuf(PChar(names[1,i+1])); Добавлено: Цитата:
Добавлено: Тут еще подумал. А такой массив случайно не рассматривается в Делфи как TStrings^ Код:
a: array[1..n] of string; |
На рисунке сказано, что указанный индекс в списке выходит за пределы допустимых границ. Например, если на форме есть TListBox с 10 строчками, при обращении к 11 «вылезет» это исключение. Массив строк - не объект! Он не может рассматриватся как TStrings и т.п. Проверьте программу :)
|
заснуть не удалось...
Netscaper, я знаю, когда "вылезает" это исключение, но вот не могу понять где (встроенный дебаггер даже строку с исключением найти не может, точнее может, но это строчка Application.Run; ). Повторюсь, что Цитата:
|
Если хочешь, зашли в оркестр, посмотрю, а то что-то с твоих слов не очень ясно...
|
Netscaper, спасибо за хелпу, но с той проблемой (EListError) я уже рассчитался. Она происходила при вызове Form1.Controls[i] с несколько превышенным значением i. Соответственно заработали пребразования типов (я, кстати, нашел по ним наконец-то инфу в хелпе, в топике про округление дробных чисел :) ). Но никак не удается сменить жирность шрифта :(
Кстати, в чем я тут не прав? Код:
procedure TForm1.EditxChange(Sender: TObject); И еще: можно ли получить хендл контрола на форме, если известен его номер? |
Savant
Цитата:
Помести на форму две кнопки: Код:
procedure TForm1.Button2Click(Sender: TObject); GetTextLen, GetTextBuf, Text Example - пример из Delphi Help Код:
Этот пример копирует текст из поля редактирования в строку, заканчивающуюся нулем, а также кладёт строку в другое поле, когда пользователь кликает на кнопке формы. |
Netscaper, огромное спасибо за хелпу с получением текста, все отлично проворачивается.
Цитата:
Цитата:
|
Netscaper
Можешь еще помочь? Как изменить порядок элементов в Form1.Controls[k] ? А то у меня с 0 по 4 идут TLabel, с 5 по 14 TImage, а потом снова продолжаются TLabel, но уже и вперемешку с TStaticText :biggrin: . И так я уже замучался сотню TLabel в TStaticText "переделывать", так тут еще фигня появилась. Пытался редактировать файл *.dfm, но он по-видимому не является определяющим в этом вопросе. |
Не очень понял смысл использования свойства Form.Controls... Почему нельзя написать Form.Label1 или Form.StaticText?
Цитата:
|
Netscaper
Цитата:
Код:
......... Гораздо эффективнее так: Код:
const a: array[1..20] of String = (...); |
Но ты можешь сделать так:
Код:
procedure TForm1.Button1Click(Sender: TObject); |
Netscaper
Полностью согласен, я несколько ранее рассматривал различные варианты реализации нужного мне алгоритма, но по скорости выиграл Form1.Controls[k].SetTextBuf(PChar(a[k+1])); Не люблю перескакивать с одного на другое когда уже готово приличное кол-во кода, но видимо придется, раз нет возможности изменить порядок следования элементов в Form1.Controls[k]. Но вот для смены "жирности" шрифта он, кажется, мне подходит. Почему-то про него я забыл. |
Время: 03:18. |
Время: 03:18.
© OSzone.net 2001-