PDA

View Full Version : سوال: پاک کردن تکست تکسباکس



space_
پنج شنبه 23 مرداد 1393, 13:41 عصر
می دونم سوالم خیلی ساده ست ولی گیر کردم که می پرسم
من دارم یه برنامه می نویسم که با بدست آوردن هندل تکست باکسا خودش یک فرم رو خودکار پر کنه ولی بعضی از تکست باکسا خودشون یه متن پیش فرض دارن مثل username وفتی متن از طریق هندل ارسال می کنم به متن قبلی اضافه میکنه چه جوری می تونم متن پیش فرض رو پاک کنم .

Delphi 2010
جمعه 24 مرداد 1393, 11:02 صبح
سلام خدمت همه دوستان
مشخص کنید کجا قصد استفاده دارید
اگه توی وب باشه پارامتر فوکوس رو برای شی ابتدا ارسال کنید بعد ارسال متن کنید

space_
جمعه 24 مرداد 1393, 17:07 عصر
سلام خدمت همه دوستان
مشخص کنید کجا قصد استفاده دارید
اگه توی وب باشه پارامتر فوکوس رو برای شی ابتدا ارسال کنید بعد ارسال متن کنید
نه توی وب نیست یک نرم افزار

یوسف زالی
شنبه 25 مرداد 1393, 09:05 صبح
- می تونید کاراکتر 8 رو ارسال کنید.
- می تونید با دستورات API متن رو انتخاب کنید و روش بنویسید.

space_
شنبه 25 مرداد 1393, 22:36 عصر
- می تونید کاراکتر 8 رو ارسال کنید.
- می تونید با دستورات API متن رو انتخاب کنید و روش بنویسید.

ممنون
امکانش هست یه منبع یا سورسی شبیه به اینی که گفتید بزارید که بدونم دقیقاً باید چیکار کنم

یوسف زالی
شنبه 25 مرداد 1393, 23:06 عصر
اول این رو تست کنید:



var
h: THandle;
s: pchar;
begin
h := somehandle;
s := 'test';
SendMessage(h, WM_SETTEXT, 0, integer(s))
end;

space_
یک شنبه 26 مرداد 1393, 22:31 عصر
اول این رو تست کنید:



var
h: THandle;
s: pchar;
begin
h := somehandle;
s := 'test';
SendMessage(h, WM_SETTEXT, 0, integer(s))
end;




ممنون دقیقاً همچون چیزی بود که می خواستم
ببخشید یه سوال دیگه هم داشتم این ادیت باکس که من الان پرش کردم این خاصیت رو داره که وقتی یه متنی رو می نویسی با زدن کلید اینتر خودش جستجو میکنه ولی وقتی از طریق هندل دستور اینتر بهش میدم کار نمیکنه ؛ میشه یه راهنمایی کنید. بازم ممنون

یوسف زالی
دوشنبه 27 مرداد 1393, 08:44 صبح
کد اینتر 13# هست. متنتون رو این شکلی کنید:


s := 'test'#13#10;

space_
دوشنبه 27 مرداد 1393, 11:21 صبح
تست کردم ولی جواب نداد روش دیگه ای نداره ؟ ممنون

یوسف زالی
دوشنبه 27 مرداد 1393, 12:28 عصر
یک کلید رو بهش مسیج بدید.


procedure PostKeyExHWND(hWindow: HWnd; key: Word; const shift: TShiftState; specialkey: Boolean = false);
{************************************************* ***********
* Procedure PostKeyEx
*
* Parameters:
* hWindow: target window to be send the keystroke
* key : virtual keycode of the key to send. For printable
* keys this is simply the ANSI code (Ord(character)).
* shift : state of the modifier keys. This is a set, so you
* can set several of these keys (shift, control, alt,
* mouse buttons) in tandem. The TShiftState type is
* declared in the Classes Unit.
* specialkey: normally this should be False. Set it to True to
* specify a key on the numeric keypad, for example.
* If this parameter is true, bit 24 of the lparam for
* the posted WM_KEY* messages will be set.
* Description:
* This procedure sets up Windows key state array to correctly
* reflect the requested pattern of modifier keys and then posts
* a WM_KEYDOWN/WM_KEYUP message pair to the target window. Then
* Application.ProcessMessages is called to process the messages
* before the keyboard state is restored.
* Error Conditions:
* May fail due to lack of memory for the two key state buffers.
* Will raise an exception in this case.
* NOTE:
* Setting the keyboard state will not work across applications
* running in different memory spaces on Win32 unless AttachThreadInput
* is used to connect to the target thread first.
************************************************** **********}
type
TBuffers = array [0..1] of TKeyboardState;
var
pKeyBuffers: ^TBuffers;
lParam: LongInt;
begin
(* check if the target window exists *)
if IsWindow(hWindow) then
begin
(* set local variables to default values *)
pKeyBuffers := nil;
lParam := MakeLong(0, MapVirtualKey(key, 0));


(* modify lparam if special key requested *)
if specialkey then
lParam := lParam or $1000000;


(* allocate space for the key state buffers *)
New(pKeyBuffers);
try
(* Fill buffer 1 with current state so we can later restore it.
Null out buffer 0 to get a "no key pressed" state. *)
GetKeyboardState(pKeyBuffers^[1]);
FillChar(pKeyBuffers^[0], SizeOf(TKeyboardState), 0);


(* set the requested modifier keys to "down" state in the buffer*)
if ssShift in shift then
pKeyBuffers^[0][VK_SHIFT] := $80;
if ssAlt in shift then
begin
(* Alt needs special treatment since a bit in lparam needs also be set *)
pKeyBuffers^[0][VK_MENU] := $80;
lParam := lParam or $20000000;
end;
if ssCtrl in shift then
pKeyBuffers^[0][VK_CONTROL] := $80;
if ssLeft in shift then
pKeyBuffers^[0][VK_LBUTTON] := $80;
if ssRight in shift then
pKeyBuffers^[0][VK_RBUTTON] := $80;
if ssMiddle in shift then
pKeyBuffers^[0][VK_MBUTTON] := $80;


(* make out new key state array the active key state map *)
SetKeyboardState(pKeyBuffers^[0]);
(* post the key messages *)
if ssAlt in Shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, key, lParam);
PostMessage(hWindow, WM_SYSKEYUP, key, lParam or $C0000000);
end
else
begin
PostMessage(hWindow, WM_KEYDOWN, key, lParam);
PostMessage(hWindow, WM_KEYUP, key, lParam or $C0000000);
end;
(* process the messages *)
Application.ProcessMessages;


(* restore the old key state map *)
SetKeyboardState(pKeyBuffers^[1]);
finally
(* free the memory for the key state buffers *)
if pKeyBuffers <> nil then
Dispose(pKeyBuffers);
end; { If }
end;
end; { PostKeyEx }

space_
دوشنبه 27 مرداد 1393, 13:44 عصر
ممنون ولی بازم کار نکرد
شاید بخاطر این کار نمیکنه که حتماً باید فوکوس باشه ؟ با فوکوس نمیشه کاریش کرد؟

یوسف زالی
دوشنبه 27 مرداد 1393, 15:20 عصر
کدی که فرستادم با دادن هندل بهش یک کلید رو در اونجا می فشاره.
تست کنید ببینید مثلا با تایمر، که فوکوس روی دکمه برنامه شما هم نیاد، آیا می تونید کلید اینتر رو براش بفرستید یا نه. VK_Return

space_
پنج شنبه 30 مرداد 1393, 00:18 صبح
کدی که فرستادم با دادن هندل بهش یک کلید رو در اونجا می فشاره.
تست کنید ببینید مثلا با تایمر، که فوکوس روی دکمه برنامه شما هم نیاد، آیا می تونید کلید اینتر رو براش بفرستید یا نه. VK_Return

از طریق هندل و VK_RETURN که همون اول تست کردم جواب نداد خودمم موندم چرا کار نمیکنه:عصبانی++: بازم از راهنماییتون ممنون