Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблемы с PAnsiChar

7.0K
31 марта 2007 года
Rusd
88 / / 26.08.2006
Здравствуйте. Если кто знает подскажите в чем загвоздка:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var h:HWND;
    s:PAnsiChar;
    p:pointer;
begin
h:=FindWindow('Progman',nil);
h:=GetWindow(h,GW_CHILD);
new(s);
GetClassName(h,s,20);   //*
GetClassName(h,s,20);
while s<>'SHELLDLL_DefView' do //**
  begin
  h:=getWindow(h,gw_HWndNext);
  GetClassName(h,s,20);
  end;
h:=GetWindow(h,GW_CHILD);
while s<>'Internet Explorer_Server' do
  begin
  h:=getWindow(h,gw_HWndNext);
  GetClassName(h,s,20);
  end;
form1.parentwindow:=h;
end;


Как видно тут дублируется строка со звездой. Если её убрать, то условие в цикле ** постоянно "ложь" и в переменную s постоянно заносится 'SHELLDLL"' (с ковычками в конце), но если строку вернуть, то в s заносится 'SHELLDLL_DefView' - как и надо. Почему в первом случае в s заносится не все имя класса и как от этого избавиться?
257
31 марта 2007 года
kosfiz
1.6K / / 18.09.2005
попробуй вместо new использовать StrAlloc, например для твоего кода:
 
Код:
s:=StrAlloc(20);
4.6K
01 апреля 2007 года
Tokolist
268 / / 22.03.2007
Можно так

 
Код:
var
  ClassName: array [0..255] of Char;
begin
  GetClassName(WndHandle, ClassName, 255);
7.0K
07 апреля 2007 года
Rusd
88 / / 26.08.2006
Вопрос решен, всем спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог