| 
| 
 | Вопрос # 2 731/ вопрос открыт / | 
 |  Еще раз про чужие окна
 Здравствуйте!
 
 Программа : ищет дескрипторы родительского и дочерних окон приложения. Caption приложения задаю в Edit. Потом его надо перевести в ANSIChar в соответствии с синтаксисом FindWindow. Хелп утверждает, что напрямую Edit.Text в ANSIChar никак. И действительно,
 
 app1)
 
 Додумался.
 
 app2)
 
 Но вот если мне надо получить копию содержимого stro
 ( последний оператор устанавливает указатель ANSIChar
 на первый символ stro, но ничего не копирует ), то пока
 никак :
 pA := StrAlloc (256) ;
 pA^ := pB^
 
 вызывает ошибку :
 
 Project Project1.exe raised exception class EAccessViolation
 with message 'Access violation at address
 0044F0F0 in module 'Project1.exe'. Write of address 0044F064'.
 Process stopped. Use Step or Run to continue.
 Как-то нервно реагирует Дельфи на косвенную адресацию в
 левой части   pA^ :=  , хотя вроде все по правилам.
 
 Простое  pA := pB ничего не дает : два указателя будут
 указывать на одну и ту же память. Среди многочисленных
 ANSI функций что-то навроде ANSICopy я не нашел :-(
 Можно, конечно, получить копию самой stro и уж на нее
 выставить pA, но как-то некузяво кажется. Не динамический
 массив получается.
 
 Что делать?
 Приложение:Переключить в обычный режим app1)       Buf1 : pChar ;   stro : string ;................     Buf1 := stro ;  [Error] Unit1.pas(33): Incompatible types: 'ShortString' and 'PAnsiChar' ========================================app2)-----------   pA,pB : pChar ;   .........   stro := Ed1.Text ; j := Length(stro) ;   stro[j+1] := Char(0) ; pB := @stro[1] ;----------- 
|  |   Вопрос задал: Яуген Таляныч (статус: Посетитель)Вопрос отправлен: 4 мая 2009, 14:41
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, Гена Гутницкий!Можно конечно ещё круче завернуть код, но зачем?
 если s:string, то PAnsiChar(s) возвратит то, что Вам нужно. Более того, можно даже писать PAnsiChar(Edit1.text)....
 Но это можно писать только в том случае, если Вы передаете значение, а не хотите там получить результат.
 "Как-то нервно реагирует Дельфи на косвенную адресацию в
 левой части pA^ := , хотя вроде все по правилам."
 А память под pA была выделенна? и места там достаточно?
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 4 мая 2009, 14:48
 
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 5 мая 2009, 14:02; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 4 мая 2009, 19:58 [#1]:Вадюх, зря ты ему так! У него перезагруз случиццо. Объясни уж про приведение типов, раз начал. А то запудрил чуваку чердак. 1 хрен ничо не понятно. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Паровоз (статус: 10-ый класс), 4 мая 2009, 21:00 [#2]:Какой такой перегруз? Вадим все правильно объяснил, нужно писать без выкрутасов: wnd:=FindWindow('',PChar(Edit1.Text));
 |  
|   | Яуген Таляныч (статус: Посетитель), 5 мая 2009, 14:02 [#3]:Слишком сложно для среднего ума, но будем считать, разобрались. А насчет окон будет мой следующий вопрос. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |