GETWINDOWTEXT sto ne raboti?
2 отговора
64 прегледа
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?
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 - тогава настава по голяма каша
---
Е т'ва е живот!
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 - тогава настава по голяма каша
---
Е т'ва е живот!
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!
tova go procetoh nekade i raboti!