GETWINDOWTEXT sto ne raboti?

2 отговора 64 прегледа
#1

GETWINDOWTEXT sto ne raboti?


slednoto nesto:

VAR
S:STRING;
BEGIN
GETWINDOWTEXT(X, PCHAR(S), 50);

vrasta daljina 0

slednoto nesto:

VAR
S:STRING[100];
BEGIN
GETWINDOWTEXT(SWIN[10], @S, 50);

koi znai zasto raboti! samoce nedopuska daljina an stringa >255 !

raboti ako S e ARRAY OF BYTE!
samoce az iskam da go imam kato STRING!

kakvo se pravi v takav slucai?



Отговор
в отговор на CALL-151 #2

Re: GETWINDOWTEXT sto ne raboti?

int GetWindowText(

HWND hWnd, // handle of window or control with text
LPTSTR lpString, // address of buffer for text
int nMaxCount // maximum number of characters to copy
);

както забелязваш втория параметър трябва да е АДРЕС на буфера - а PCHAR() ти cast-ва стринга до PChar - връща константен указател към стринга(предполагам) - т.е. не може да бъде променян!!!

когато декларираш S:String[100] - се взима не String a ShortString типа - това май е хватката - и въобще провери си дали си включил следните опции на компилатора
Extended Syntax
Hudge Strings

Предлагам ти да направиш следното - не съм го тествал но предполагам 4е ще работи

var s:array[0..511] of char;

GetWindowText(Control.Handle, @S, 512);

Все пак не забравяй 4е и в passcal стринговете са си просто масиви от char -ове - само 4е компилатора е по интелигентен в сравнение с С++ компилаторите в това отношение
И въобще ако искаш пове4е инфо относно работата с PChar типа - и преобразуване - просто е - PChar(Str) и String(pchC)
Оба4е ако трябва да работиш с променливите - а не просто да ги преобразуваш oт един в друг тип - ще трябва да използваш съответните функции - за PChar погледни string handling routines (null-terminated)
доста са !!!


По сложно става ако използваш WideString - тогава настава по голяма каша

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #3

razbrah go!

znaci vsicko e kakto v parvia slucai samoce sle deklaraciata na STRING-a trebva da se psie SETLENGTH(S, xxx) za da se zadeli mesto v stringa!?
tova go procetoh nekade i raboti!

Отговор