PDA

View Full Version : اصلاح کارکترهای "ک"درزمان ورود.



SYNDROME
شنبه 02 تیر 1386, 15:44 عصر
با سلام
دوستان بنده یک فرم Master ساختم وKeyPreview مربوط به فرم را True کرده ام و در رویداد KeyPress مربوط به آن کد زیر را نوشته ام.


procedure TMaster.MyEdit2KeyPress(Sender: TObject; var Key: Char);
begin
IF Key = #223 then Key := #152;
IF Key = #236 then Key := #237;
end;

حالا همه فرمهای را از کلاس این فرم می سازم.


TForm1 = class(TMaster)

حالا هر زمان کاربر کلید"ک" را بزند و کد مربوط #223 باشد به #152 تغییر میکند.
و اگر کلید "ی" با کد #236 زده بشود به #237 تبدیل می شود.
حالا بنده دو سوال داشتم.
1-نظر شما دوستان در رابطه با این کار چی است؟خوب است یا بد و همچنین دلیل خود را بیان کنید.
2-اگر روشی بهتر و سریععتر از این داریدپیشنهاد کنید.
منتظر نظرات شما دوستان محترم هستم.

dkhatibi
شنبه 02 تیر 1386, 17:20 عصر
روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.

SYNDROME
شنبه 02 تیر 1386, 20:57 عصر
با سلام

روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.
ممنون از اینکه نظر خود را اعلام کردید.
ولی می گویید چرا؟؟؟
منتظر نظرات شما و دیگر دوستان هستم.

FSarab
شنبه 02 تیر 1386, 21:02 عصر
unit Unit1;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AppEvnts, StdCtrls;


type
TForm1 = class(TForm)
ApplicationEvents1: TApplicationEvents;
Edit1: TEdit;
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = WM_CHAR) and (Msg.wParam = 152) then
begin
Msg.wParam := 223;
Handled := False;
end
else if (Msg.message = WM_CHAR) and (Msg.wParam = 236) then
begin
Msg.wParam := 237;
Handled := False;
end;
end;

SYNDROME
شنبه 02 تیر 1386, 21:36 عصر
با سلام
FSarab جان دستت درد نکنه ولی خط زیر در زمان اجرای برنامه پیغام می دهد و آن را پاک می کند.


ApplicationEvents1: TApplicationEvents;


دوستان نظرشان در رابطه با این روش چیست؟
باز هم من منتظر سایر جوابها و پیشنهاد ها هستم.

FSarab
شنبه 02 تیر 1386, 23:47 عصر
کامپوننت ApplicationEvents را از پلت Additional به فرم اضافه کن و همچنین کامپوننت Edit را از پلت Standard به فرم اضافه کن.

ghabil
یک شنبه 03 تیر 1386, 10:09 صبح
با سلام
دوستان بنده یک فرم Master ساختم وKeyPreview مربوط به فرم را True کرده ام و در رویداد KeyPress مربوط به آن کد زیر را نوشته ام.
منتظر نظرات شما دوستان محترم هستم.

همین روش بهترین روش هست. سایر روشها مشکل دارند.


روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.

این دیگه از اون حرفها بودها !!!!!

Arman_1367
یک شنبه 03 تیر 1386, 11:32 صبح
من نمی دانم چرا بعضی از دوستان عادت کردن همدیگر را مسخره کنند اگر قرار به مسخره کردن هست دیگه فردی که مسخره شده نظر نمی ده و ...
امید وارم دیگه از این جور مسائل پیش نیاید.

هر کس برای خودش شخصیتی داره.



یا حق...

SYNDROME
یک شنبه 03 تیر 1386, 13:30 عصر
با سلام
با شکر از آقای Ghabil و همه دوستان دیگر.

من نمی دانم چرا بعضی از دوستان عادت کردن همدیگر را مسخره کنند اگر قرار به مسخره کردن هست دیگه فردی که مسخره شده نظر نمی ده و ...
امید وارم دیگه از این جور مسائل پیش نیاید.
هر کس برای خودش شخصیتی داره.

فکر نکنم دوستان قصد چنین کاری را داشته باشند و با شناختی که بنده از دوستان داریم غیر ممکن است چنین منظوری داشته باشد.
بهتر است از حاشیه خارج شویم.
من باز هم متظر نظرات دیگر دوستان هستم.

Kamyar.Kimiyabeigi
یک شنبه 03 تیر 1386, 15:17 عصر
چرا از kbd استفاده نمیکنین تا Keyboard همه کاربرانتون یکسان بشه در ضمن نیازی هم به کد نویسی نداره.

SYNDROME
یک شنبه 03 تیر 1386, 15:39 عصر
با سلام

چرا از kbd استفاده نمیکنین تا Keyboard همه کاربرانتون یکسان بشه در ضمن نیازی هم به کد نویسی نداره.
با تشکر از راهنمایی شما
قبلا در رابطه با این قضیه بحث شد که اگر نرم افزار دیگری روی سیستم نصب باشد تکلیف چیست؟

dkhatibi
یک شنبه 03 تیر 1386, 16:06 عصر
می تونی یک کامپوننت edit برای این منظور بنویسی
این هم یک راه سخت تر و جالب تر. که از روش اولیه ی خودت باید بهره گیری.

SYNDROME
یک شنبه 03 تیر 1386, 20:03 عصر
با سلام

می تونی یک کامپوننت edit برای این منظور بنویسی
این هم یک راه سخت تر و جالب تر. که از روش اولیه ی خودت باید بهره گیری.
دستت درد نکنه .
ولی اگر این کار را بکنم باید برای ComboBox و DbGrid و . . . کامپونتهای دیگر هم این کار را بکنم.
آیا راه حل دیگری سراغ ندارید.

اَرژنگ
یک شنبه 03 تیر 1386, 20:12 عصر
با داده‌ها چکار میکنید؟ میریزیدشان به داتابیس؟ اگر که بله، به جایه اینکه ک ها را در قسمت گوئی جایگیزین کنید ، در زمان اینسرت به داتابیس عوض کنید.
روش FSarab (http://barnamenevis.org/forum/member.php?u=22701) چطور بود؟ به نظر من خوب آمد، از روش FSarab (http://barnamenevis.org/forum/member.php?u=22701) چرا استفاده نمیکنید؟ (امتحانش نکردم ، اگرشما امتحان کردید و به مشکلی برخوردید بگید)

مهدی کرامتی
یک شنبه 03 تیر 1386, 20:41 عصر
بنظر من بهتره یک کامپوننت بنویسید که رویداد OnKeyDown فرم Parent را Hook کند و پس از اجرای پروسه تعویض کد کلید فشرده شده، رویداد مذکور در فرم Parent را فراخوانی کند که ضرری به روند اجرای برنامه وارد نشود. اگر توضیحات کافی نبود میتوانم کامپوننت را برایتان بنویسم.

SYNDROME
یک شنبه 03 تیر 1386, 20:56 عصر
با سلام

بنظر من بهتره یک کامپوننت بنویسید که رویداد OnKeyDown فرم Parent را Hook کند و پس از اجرای پروسه تعویض کد کلید فشرده شده، رویداد مذکور در فرم Parent را فراخوانی کند که ضرری به روند اجرای برنامه وارد نشود. اگر توضیحات کافی نبود میتوانم کامپوننت را برایتان بنویسم.
دست شما دوست عزیز درد نکنه.
منظورتان دقیقا همین روشی هست که خودم در اول تاپیک پیشنهاد دادم.
اگر امکان دارد بیشتر توضیح دهید.
با تشکر

SYNDROME
یک شنبه 03 تیر 1386, 21:10 عصر
با سلام

با داده‌ها چکار میکنید؟ میریزیدشان به داتابیس؟ اگر که بله، به جایه اینکه ک ها را در قسمت گوئی جایگیزین کنید ، در زمان اینسرت به داتابیس عوض کنید.

آن روش کمی سخت است چون هر جا که باید ذخیره و جستجو و . . . انجام دهم باید از تایع فوق استفاده شود.
با سلام

روش FSarab (http://barnamenevis.org/forum/member.php?u=22701) چطور بود؟ به نظر من خوب آمد، از روش FSarab (http://barnamenevis.org/forum/member.php?u=22701) چرا استفاده نمیکنید؟ (امتحانش نکردم ، اگرشما امتحان کردید و به مشکلی برخوردید بگید)
روش فوق را اول امتحان کردم جواب نداد ولی با نکته ای که کاربر عزیز بیان کرد دوباره امتحان می کند.
با تشکر از توجه شما.

SYNDROME
یک شنبه 03 تیر 1386, 21:23 عصر
با سلام
اقا Arman گل می تونی در رابطه با دستورات بالا توضیح بدهی و نحوه کار کردنش و نحوه اصلاح کدها.(من تا حالا با این نوع کار آشناییت ندارم)
ممنون از کمکتان

SYNDROME
یک شنبه 03 تیر 1386, 21:39 عصر
با سلام

دوست عزیز آی دی بزار تا برات توضیح بدم.
SYNDROME2100@Yahoo.com
حالا یک سوال.
روشی را که خودم پیشنهاد دادم چطور بود.فکر کنم تقریبا یک نوع نگرش دارند ولی در نحوه اجرا متفاوتند.

FSarab
یک شنبه 03 تیر 1386, 22:25 عصر
http://us.f13.yahoofs.com/bc/467ec31f_715c/bc/My+Documents/Test.zip?bfxesfGBgmsUJ0Kx

مهدی کرامتی
دوشنبه 04 تیر 1386, 07:01 صبح
منظورم دقیقا چنین چیزی بود:


unit uFarsiFixer;

interface

uses
Forms,
Controls,
SysUtils,
Dialogs,
Classes;

type
TFarsiKeyboardHook = class(TComponent)
private
parentKeyDown: TKeyEvent;
procedure myKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Barnamenevis.org', [TFarsiKeyboardHook]);
end;

{ TFarsiKeyboardHook }

constructor TFarsiKeyboardHook.Create(AOwner: TComponent);
begin
inherited;
if AOwner is TForm then
begin
parentKeyDown := TForm(Owner).OnKeyDown;
TForm(Owner).OnKeyDown := myKeyDown;
TForm(Owner).KeyPreview := true;
end;
end;

procedure TFarsiKeyboardHook.myKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 223 then Key := 152;
if Key = 236 then Key := 237;
if Assigned(parentKeyDown) then
parentKeyDown(Sender, Key, Shift);

end;

end.



فکر میکنم کد فوق اونقدر ساده هست که نیازی به توضیح نداشته باشه، اما بهرحال اگر نیاز هست بفرمائید تا توضیح بدم.

Kamyar.Kimiyabeigi
دوشنبه 04 تیر 1386, 07:47 صبح
با سلام

با تشکر از راهنمایی شما
قبلا در رابطه با این قضیه بحث شد که اگر نرم افزار دیگری روی سیستم نصب باشد تکلیف چیست؟

ولی این kbd اصلا" کار غیر استانداردی انجام نمیده برعکس Keyboard را کاملا" استاندارد میکنه. من خودم بشخصه بعنوان کاربر وقتی ببینم که Keyboard ام استاندارد شده ترجیح میدم بقیه نرم افزارهای سیستمم هم براساس همین Keyboard کار کنن.

Arman_1367
دوشنبه 04 تیر 1386, 08:50 صبح
به نظر شما آیا این روش بهتره که KeyPreview فرم فعال کنیم می دانید اگر مثلاً 10 تا panel روی هم باشد برای آنکه خود کنترل کلید را برای فرم بفرستد باید یک حلقه را طی کند و بالآخره این یک مقدار زمان هر چند اندک می گیرد بعد می گن دلفی زبان کندی همینه دیگه البته من قبول دارم همه شما تجربه بیشتری دارید اما تمام برنامه نویسی این نیست که کد بی نقصی باشه باید علاوه بر آن از بهترین روش هم استفاده بشه تا برنامه سریع هم باشه.

Hamid_PaK
دوشنبه 04 تیر 1386, 12:16 عصر
روش آرمان خوب بود ولی کاش دیگه یه روال جدا واسه WndProc درست نمی کرد و همون رو Override می کرد ...

یا حق ...

SYNDROME
دوشنبه 04 تیر 1386, 13:27 عصر
با سلام

ولی این kbd اصلا" کار غیر استانداردی انجام نمیده برعکس Keyboard را کاملا" استاندارد میکنه. من خودم بشخصه بعنوان کاربر وقتی ببینم که Keyboard ام استاندارد شده ترجیح میدم بقیه نرم افزارهای سیستمم هم براساس همین Keyboard کار کنن.
روش خوبی است ولی اگر قبلا یک نرم افزار دیگه رو سیستم نصب شده باشد و با صفحه کلید غیر استاندارد اطلاعات را وارد کرده باشد و شما صفحه کلید را تغییر دهید آنگاه تکلیف چیست؟

ghabil
دوشنبه 04 تیر 1386, 13:59 عصر
بازهم میگم بنظر من روش خودت از همه روشهایی که اینجا مطرح شده (بجز مورد ساختن کامپوننت که تقریبا یکی هستند) روش بهتری به دلایل مختلف که از همه مهمترشون اینه که یک ساختار درست Object Oriented هست نه Spaghetti Oriented ;)

SYNDROME
دوشنبه 04 تیر 1386, 14:27 عصر
با سلام
با تشکر فراوان از کاربر گرامی DelphiAssistant.
واقعا بنده را شما و دیگر دوستان شرمنده کردید.
دستورا شما را در یک Unit نوشتم و برنامه اجرا شد.ولی 2 تا مشکل دارم.
1-اگر امکان داشت دستورات را تا حدودی برام توضیح دهید.(البته گیرایی بنده پایین است:چشمک: )
2-و نحوه فعال شدن تابع زیر را نیز توضیح دهید.
منتظر جواب شما هستم.
با تشکر

SYNDROME
دوشنبه 04 تیر 1386, 14:34 عصر
با سلام

بازهم میگم بنظر من روش خودت از همه روشهایی که اینجا مطرح شده (بجز مورد ساختن کامپوننت که تقریبا یکی هستند) روش بهتری به دلایل مختلف که از همه مهمترشون اینه که یک ساختار درست Object Oriented هست نه Spaghetti Oriented ;)
با تشکر از Ghabil عزیر که باز هم نظر خود را بیان کرد.
علیرضا جان ما برنامه نویسان باید یاد بگیریم همیشه گوش شنوا داشته باشیم تا بتوانیم قویتر از قبل شویم.
هدف بنده از ایجاد این تاپیک 2 پیز بود:
1-رفع مشکل خودم.
2-بعد از بحث با دوستان دیگر به یک روش مناسب برسیم و روش پیشنهادی را تحلیل و ضعف و حسن آنها را بیان کنیم.
دوستان لطف کردند و در این بحث شرکد کردند و واقعا بنده را مورد لطف خود قرار دادند.
بنده امیدوار در پایان این تاپیک به یک جمع بندی خوب برسیم.
با تشکر از همه دوستان که نظرتان خود را بیان کردند و باز هم منتظر نظرات بقیه کاربران هستیم .

A.Nemati
دوشنبه 04 تیر 1386, 17:01 عصر
نظرات جالبی ارایه شد ولی به این موضوع نیز فکر کنید.
در برنامه‌های ما کاربران برای ورود اطلاعات معمولا یا از Edit استفاده می‌کنند یا Memo و در موارد معدودی از Combobox و MaskEdit. و همین نیازهای ما رو پاسخ می‌ده. به نظر من بهتره بجای اینکه ما اورهد این کار رو روی کل فرم بگذاریم و یا کی‌برد رو Hook کنیم، می‌تونیم چهار کلاس پایه کوچولو برای این چهار کامپوننت (تازه اگه هر چهارتاش لازم باشه)، درست کنیم که حروف رو جایگزین کنه (مثل TMaster آقای SYNDROME).
مزیت این کار زیاده، مثلا:
1- اورهد بیخودی روی کل سیستم ندارید و فقط ابزار موردی نیازتون اونم در موقع ورود اطلاعات، چک می‌شن.
2- همین اطلاعات رو توی دیتابیس می‌ریزید و در نتیجه موقع نمایش اطلاعات در هر کامپوننتی (Grid, Label, Edit, ListBox, ...) همونطوری که ذخیره شده می‌بینید.
3- می‌تونید کم کم این کامپوننتهای پایه خودتون رو توسعه بدید و عملا از یک OO اصولی لذت ببرید.

موفق باشید.

اَرژنگ
دوشنبه 04 تیر 1386, 17:21 عصر
با سلام

آن روش کمی سخت است چون هر جا که باید ذخیره و جستجو و . . . انجام دهم باید از تایع فوق استفاده شود.
.
اگر درست برنامه نویسی شده باشه ذاشتن یک فیلتر در لایه داتابیس کار درستی است.
به جایه اینکه در هر فرم ک ها و ی ها را بخواهند درست کنند، باید یا در یکجا برایه کل اپلیکیشن کار کنه و یا اینکه در یکی از لایه‌هایه داتابیس و یا لایه منطقی برنامه (البته اگر برنامه نویسی لایه‌ای میکنند اگر هم که خیر ، برایه برنامه‌نویسی به روش اسپاگتی دیگر روش بهتر و یا بد تر وجود نداره ).

SYNDROME
دوشنبه 04 تیر 1386, 20:19 عصر
با سلام

نظرات جالبی ارایه شد ولی به این موضوع نیز فکر کنید.
در برنامه‌های ما کاربران برای ورود اطلاعات معمولا یا از Edit استفاده می‌کنند یا Memo و در موارد معدودی از Combobox و MaskEdit. و همین نیازهای ما رو پاسخ می‌ده. به نظر من بهتره بجای اینکه ما اورهد این کار رو روی کل فرم بگذاریم و یا کی‌برد رو Hook کنیم، می‌تونیم چهار کلاس پایه کوچولو برای این چهار کامپوننت (تازه اگه هر چهارتاش لازم باشه)، درست کنیم که حروف رو جایگزین کنه (مثل TMaster آقای SYNDROME).
مزیت این کار زیاده، مثلا:
1- اورهد بیخودی روی کل سیستم ندارید و فقط ابزار موردی نیازتون اونم در موقع ورود اطلاعات، چک می‌شن.
2- همین اطلاعات رو توی دیتابیس می‌ریزید و در نتیجه موقع نمایش اطلاعات در هر کامپوننتی (Grid, Label, Edit, ListBox, ...) همونطوری که ذخیره شده می‌بینید.
3- می‌تونید کم کم این کامپوننتهای پایه خودتون رو توسعه بدید و عملا از یک OO اصولی لذت ببرید.

موفق باشید.
با تشکر از اظهار نظر شما دوست بزرگوار.

اگر درست برنامه نویسی شده باشه ذاشتن یک فیلتر در لایه داتابیس کار درستی است.
به جایه اینکه در هر فرم ک ها و ی ها را بخواهند درست کنند، باید یا در یکجا برایه کل اپلیکیشن کار کنه و یا اینکه در یکی از لایه‌هایه داتابیس و یا لایه منطقی برنامه (البته اگر برنامه نویسی لایه‌ای میکنند اگر هم که خیر ، برایه برنامه‌نویسی به روش اسپاگتی دیگر روش بهتر و یا بد تر وجود نداره ).
ولی دوست گرامی روشی که بنده گفتم و دیگر دوستان نیز گفتند راحت است چون فقط در اول فرم می نویسی TForm2 = class(TForm_Master) و خیلی راحت است.
ولی باز هم از نظر شما متشکرم.
کاربر محترم DelphiAssistant من منتظر توضیحات شما هستم.
ممنون می شوم اگر در رابطه با تابعی که نوشتید توضیح بدهید.
با تشکر فراوان

FSarab
سه شنبه 05 تیر 1386, 00:37 صبح
unit uFarsiFixer;
interface
uses
Forms,
Controls,
SysUtils,
Dialogs,
Classes;
type
TFarsiKeyboardHook = class(TComponent)
private
parentKeyPress: TKeyPressEvent;
procedure myKeyPress(Sender: TObject; var Key: Char);
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Barnamenevis.org', [TFarsiKeyboardHook]);
end;
{ TFarsiKeyboardHook }
constructor TFarsiKeyboardHook.Create(AOwner: TComponent);
begin
inherited;
if AOwner is TForm then
begin
parentKeyPress := TForm(Owner).OnKeyPress;
TForm(Owner).OnKeyPress := myKeyPress;
TForm(Owner).KeyPreview := True;
end;
end;
procedure TFarsiKeyboardHook.myKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #152 then Key := #223;
if Key = #236 then Key := #237;
if Assigned(parentKeyPress) then
parentKeyPress(Sender, Key);
end;
end.

اَرژنگ
سه شنبه 05 تیر 1386, 06:04 صبح
با سلام

ولی دوست گرامی روشی که بنده گفتم و دیگر دوستان نیز گفتند راحت است چون فقط در اول فرم می نویسی TForm2 = class(TForm_Master) و خیلی راحت است.
ولی باز هم از نظر شما متشکرم.

راحتی در برنامه‌نویسی۲ جور است.
۱ـ با یک هک که فعلا برنامه کار کند.
۲ـ استفاده از اصولی که در دراز مدت توسعه برنامه و نگهداریش راحت باشد٫

این روش که شما گفتید و دیگر دوستان نیز گفتند راحتیش به این است الان با یک خط از یک لحاظ این مشکل را برطرف کرده ولی به مشکلات دیگری که میانجمد فکر کنید:
۱ـمنطق برنامه را به گوئی گره میزنه (این همیشه در دراز مدت مشکل ایجاد میکنه)
۲ـ اگر کسی مستقیما داتا را به داتابیس وارد کند(چه دستی و یا با یک برنامه دیگر) این روش ک ها را درست نمیکنه
۳- تمام فرمهایه پروجکت باید از TForm_Master باید به ارث ببرند. دلیل این ارث بردن به این که منطق برنامه را که مرتبط به نگهداری داده در داتابیس است را داشته باشند به رفتار فرم گره میزنه. حالا اینکه طرض رفتار فرمها عوض شده به سختی استفاده کردن از فرم اضافه میکند، البته نه الان که تازه است و کد دیگری نیست ولی با گذاشتن زمان و اضافه شدن کد احتمالش بیشتر میشه. وقتی هم که مشکلات ایجاد میشه به دلیل وجود داشتن کد در جائی که نیاز نبود (یعنی اینکه یک روش حل اشتباه در دراز مدت بیشتر ناراحتی بوجود میاره ).

حالا اگر برنامه قرار نبود که داده ها را به داتابیس بریزه و فقط کاراکترها را ک شان را عوض کند، این روش حرف نداشت. ولی این برنامه به احتمال زیاد در آینده گسترش خواهد یافت. اگر مشکل را الان به شکل صحیح درست نکنید با گذشت زمان فقط سختر میشه.

در ضمن اینها نظر من نیست، هر کتاب شروع برنامه نویسی همین را میگد و فقط من بازگو کردم.
مشکل شما در حقیقت فقط اصلاح کارکترهایه ک در زمان ورود نیست، بله دلایل و عواقب اینکار در قسمتهایه دیگر برنامه اثر میگذارند. با داشتن راه حلی که عواقب اینکار را فقط به یک قسمت کوچکی از برنامه محدود میکنند در دراز مدت خیلی راحتتر خواهد بود تا استفاده از TForm2 = class(TForm_Master).

اما اگر این برنامه قرار نیست گسترش پیدا کند و از این حالتی که الان وجود داره تغییر نخواهد کرد (و الان هم کار میکند) در آن سورت از TForm2 = class(TForm_Master) استفاده کنید و هرچی که بالا گفتم ر افراموش کنید.

اَرژنگ
سه شنبه 05 تیر 1386, 06:22 صبح
بازهم میگم بنظر من روش خودت از همه روشهایی که اینجا مطرح شده (بجز مورد ساختن کامپوننت که تقریبا یکی هستند) روش بهتری به دلایل مختلف که از همه مهمترشون اینه که یک ساختار درست Object Oriented هست نه Spaghetti Oriented ;)
Object Oriented به تنهایی هیچ فایده‌ای نداره، استفاده از طراحی‌هایه درست پله بعد است.
در ضمن یک بالانسی باید بین مشکلاتی که یک روش حل میکند و مشکلات دیگری که بوجود میاره باشد. در این بحث ما حتی دلیل اینکار را نپرسیده نمیتونیم نظر بدیم.
نوشتن برنامه هایی که از اسپاگتی کد استفاده میکنند و کاملا هم Object Oriented هستند خیلی آسان است.
مثال:
در باتن کلیکها کد نوشتن، همینطوری ساختن رشته‌هایه اس‌کیو‌ال با استفاده از تکستهایه ادیت‌باکسها و ...
Object Oriented مثل یک چاقو میماند، میشه باهاش هم جراحی کرد و هم قصابی ، روش استفاده هم مهمه، چونکه بعضا قصابی هم لازمه.

اَرژنگ
سه شنبه 05 تیر 1386, 06:28 صبح
روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.
این بدترین کاری است که یک برنامه نویس میتونه انجام بده. کد ایشان خیلی مختصر و جمع و جور است، با کپی و پیست فقط مشکلات اضافه میشه.
به http://en.wikipedia.org/wiki/Inheritance_(computer_science)
نگاه بندازید.

اَرژنگ
سه شنبه 05 تیر 1386, 06:45 صبح
من یک سوال داشتم، دلیل اینکار چی است؟ چرا فقط ک ها؟ ی هم دو جور است.
اگر ممکن است دلایل اینکه چرا اینکار را نیاز دارید هم را بگید، وقتی که مشکل اصلی معلوم نیست حرف زدن در مورد یک روش حل معنی نداره.
در ضمن همینطوری عوض کردن داده کار درستی نیست. به فرض هم بگیم که بهترین روش را برایه عوض کردن ک داریم. این کار اصلا از قوائد برنامه نویسی بدور است. اگر ما داریم داده ها را عوض میکنیم، چیزی که در داتابیس میگذاریم چی هست؟ چونکه همان چیزی نیستش که کاربر به برنامه داد. فرض کنید گوگل هم همینطوری کار میکرد ، موقع جسجو فقط ک هایی را خودش قبول داره میگرفت. اصلا برایه کسی قابل قبول نمیبود.
مشکلی که میخواهید حل کنید اصلا چی هست؟ چونکه این روش جواب درست به یک سوال اشتباه است.

اَرژنگ
سه شنبه 05 تیر 1386, 08:24 صبح
با سلام

با تشکر از راهنمایی شما
قبلا در رابطه با این قضیه بحث شد که اگر نرم افزار دیگری روی سیستم نصب باشد تکلیف چیست؟
بستگی دارد. شما نمیتوانید که تمام مشکلات را حل کنید. آگر این روش کمترین مشکلات را در بر دارد، میتوانید به کاربر اعلام کنید که برایه استفاده از نرم افزاز شما kbd فعال میشود، و برایه غیر فعال کردنش هم بهشان اطلاعت میدید.
به هر حال در برنامه نویسی همه چیز را نمیشه انجام داد و گاها باید تکالیف را به متخصصش واگذار کرد و اینجوری که من دستگیرم شد برایه این مشکل شما kbd متخصص است.
این کار استانداردی است از این بابت که برنامه‌هایی هستند که برایه درست کار کردن از برنامه‌ها و یا فریم ورکهایه دیگر بهره مند میشند. به کاربر اطلاع بدید و دردسر خودتان را کم کنید.

Arman_1367
سه شنبه 05 تیر 1386, 10:16 صبح
دوستان امید وارم حال همگی شما خوب باشد.
به نظر من روش آقای ارژنگ بهتر است و با منطق برنامه نویسی شئی گرا بیشتر همخوانی دارد چون یک فیلتر برای اصلاح کارکترهای ورودی هم کار یک برنامه نویس را راحت تر می کند و هم حجم برنامه را کاهش می دهد یک مثال ساده این است که با استفاده از کمپاننت DelphiAssistant شما برای هر فرم باید یک کمپاننت قرار دهید اما با در دست گرفتن پیامهای ارسالی برای برنامه شما فقط یک کمپاننت و فقط یک بار کد نویسی نیاز دارید.در ضمن فرض کنید شما بخواهید از یک فرم که در کمپاننت خاصی طراحی شده و به صورت مستقیم امکان دسترسی به آن را ندارید در برنامه استفاده کنید و باز هم نیاز به اصلاح کارکتر ورودی داشته باشید پس این راه بهتر است.
در هر صورت این یک کمپاننت ساده هست که امکان فیلتر کردن رویدادهای موشواره و کی بورد ارسالی برای پروژه را به شما می دهد.
لینک دانلود:لبخند: (http://www.sharemation.com/GameGirl/ArmanAppControler.rar?uniq=-ap473y)

A.Nemati
سه شنبه 05 تیر 1386, 13:07 عصر
به هر حال در برنامه نویسی همه چیز را نمیشه انجام داد و گاها باید تکالیف را به متخصصش واگذار کرد و اینجوری که من دستگیرم شد برایه این مشکل شما kbd متخصص است.
این کار استانداردی است از این بابت که برنامه‌هایی هستند که برایه درست کار کردن از برنامه‌ها و یا فریم ورکهایه دیگر بهره مند میشند. به کاربر اطلاع بدید و دردسر خودتان را کم کنید.

اگه به این موضوع به عنوان یک روش کلی و اصولی بخواهیم نگاه کنیم، نمی‌تونیم چیزی مثل kbd رو مطرح کنیم.
چرا بیشتر ما وقتی صحبت از برنامه‌هامون می‌شه اونا رو فقط در یک محدوده چند یا حداکثر چند ده کاربر می‌بینیم؟ به نظر من وقتی یک برنامه اصولی می‌نویسید، باید به بازه‌های بزرگتری فکر کنید. قبول کنید که خیلی سخته که برای تک تک کاربران یک سازمان بزرگ، kbd نصب کنید. حالا اگه برنامه‌تون بخواد روی وب کار کنه که واویلا می‌شه...
مشکل دیگه اینکه برخی کاربرها هستند که نمی‌تونید به راحتی صفحه کلیدشون رو عوض کنید، حالا یا سلیقه‌ای، یا همانطور که دوستان گفتند به خاطر برنامه‌های دیگشون و یا حتی برخی کاربران که فکر می‌کنند خیلی واردن! اصلا نمی‌ذارن شما به ویندوزشون دست بزنید.!!!
حتما پیش خودتون فکر می‌کنید که "اگه من به عنوان برنامه‌نویس، اینو اجبار کنم، باید انجام بده". ولی دوستان، در سازمان‌های بزرگ چنین خبرهایی نیست، به راحتی سیستم شما را کنار می‌گذارن.
به نظر من بهتره کمی علمی‌تر با سوالی که در ابتدا مطرح شده برخورد کنیم.
موفق باشید.

SYNDROME
سه شنبه 05 تیر 1386, 13:21 عصر
با سلام

بستگی دارد. شما نمیتوانید که تمام مشکلات را حل کنید. آگر این روش کمترین مشکلات را در بر دارد، میتوانید به کاربر اعلام کنید که برایه استفاده از نرم افزاز شما kbd فعال میشود، و برایه غیر فعال کردنش هم بهشان اطلاعت میدید.
به هر حال در برنامه نویسی همه چیز را نمیشه انجام داد و گاها باید تکالیف را به متخصصش واگذار کرد و اینجوری که من دستگیرم شد برایه این مشکل شما kbd متخصص است.
این کار استانداردی است از این بابت که برنامه‌هایی هستند که برایه درست کار کردن از برنامه‌ها و یا فریم ورکهایه دیگر بهره مند میشند. به کاربر اطلاع بدید و دردسر خودتان را کم کنید.
با این روش یا بایدسیستم شما نصب باشد یا سیستم شرکت دیگر.
هر روز هم مشکل تازه ای پیش می آید.

SYNDROME
سه شنبه 05 تیر 1386, 13:27 عصر
با سلام

دوستان امید وارم حال همگی شما خوب باشد.
به نظر من روش آقای ارژنگ بهتر است و با منطق برنامه نویسی شئی گرا بیشتر همخوانی دارد چون یک فیلتر برای اصلاح کارکترهای ورودی هم کار یک برنامه نویس را راحت تر می کند و هم حجم برنامه را کاهش می دهد یک مثال ساده این است که با استفاده از کمپاننت DelphiAssistant شما برای هر فرم باید یک کمپاننت قرار دهید اما با در دست گرفتن پیامهای ارسالی برای برنامه شما فقط یک کمپاننت و فقط یک بار کد نویسی نیاز دارید.در ضمن فرض کنید شما بخواهید از یک فرم که در کمپاننت خاصی طراحی شده و به صورت مستقیم امکان دسترسی به آن را ندارید در برنامه استفاده کنید و باز هم نیاز به اصلاح کارکتر ورودی داشته باشید پس این راه بهتر است.
در هر صورت این یک کمپاننت ساده هست که امکان فیلتر کردن رویدادهای موشواره و کی بورد ارسالی برای پروژه را به شما می دهد.
لینک دانلود:لبخند: (http://www.sharemation.com/GameGirl/ArmanAppControler.rar?uniq=-ap473y)
آقا آرمان دستت درد نکنه.
کامپونت را نگاه کردم.خیلی جالب بود.

SYNDROME
سه شنبه 05 تیر 1386, 22:40 عصر
با سلام
با اجازه کاربر DelphiAssistant من کامژونت ایشان را کمی تغییر دادم(در حالت قبل کار نمی کرد)


unit Unit_FarsiFixer;
interface
uses
Forms,
Controls,
SysUtils,
Dialogs,
Classes;
type
TFarsiKeyboardHook = class(TComponent)
private
parentKeyPress: TKeyPressEvent;
procedure myKeyPress(Sender: TObject; var Key: Char);
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Barnamenevis.org', [TFarsiKeyboardHook]);
end;
{ TFarsiKeyboardHook }
constructor TFarsiKeyboardHook.Create(AOwner: TComponent);
begin
inherited;
IF AOwner is TForm then
begin
parentKeyPress := TForm(Owner).OnKeyPress;
TForm(Owner).OnKeyPress := myKeyPress;
TForm(Owner).KeyPreview := true;
end;
end;
procedure TFarsiKeyboardHook.myKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #223 then Key := #152;
if Key = #236 then Key := #237;
if Assigned(parentKeyPress) then
parentKeyPress(Sender, Key);
end;
end.

امیدوارم از کار بنده ناراحت نشده باشید.
این کامپونت را تست کردم درست جواب داد.
با تشکر فراوان.

ghabil
پنج شنبه 07 تیر 1386, 02:08 صبح
Object Oriented به تنهایی هیچ فایده‌ای نداره، استفاده از طراحی‌هایه درست پله بعد است.
در ضمن یک بالانسی باید بین مشکلاتی که یک روش حل میکند و مشکلات دیگری که بوجود میاره باشد. در این بحث ما حتی دلیل اینکار را نپرسیده نمیتونیم نظر بدیم.
نوشتن برنامه هایی که از اسپاگتی کد استفاده میکنند و کاملا هم Object Oriented هستند خیلی آسان است.
مثال:
در باتن کلیکها کد نوشتن، همینطوری ساختن رشته‌هایه اس‌کیو‌ال با استفاده از تکستهایه ادیت‌باکسها و ...
Object Oriented مثل یک چاقو میماند، میشه باهاش هم جراحی کرد و هم قصابی ، روش استفاده هم مهمه، چونکه بعضا قصابی هم لازمه.

با اینکه سعی کردی از جملات قشنگی استفاده کنی ولی چیزایی که گفتی درست نیست ، البته نیمخوام د مورد اینکه OOP خوبه یا بده بحث فلسفی بکنم چون متاسفانه اکثر بحثهای اینجا بجای اینکه به نتیجه گیری علمی ختم بشه به قفل و کلید و کلون ختم میشه ولی نه از زبان خودم که از زبان افراد صاحب نظر بهت میگم که OOP و حفظ قواعدش رو بصورت کامل و دقیق و بدون تنبلی اولین اصل برنامه نویسیت قرار بده ، اگر میخوای روزی بجای کدنویس برنامه نویس و طراح سیستم بشی .
منظورم هم از سیستم یک سیستم به معنی واقعی هست.

جدای از این مباحث اگر روزی برنامه نویسی OOP رو کامل فهمیدی اون روز بهت قول میدم که لذت برنامه نویسی برات چندین برابر میشه و دیگه امکان نداره حاضر بشی بزاریش کنار و تبلیغ اسپاگتی بکنی.

اَرژنگ
پنج شنبه 07 تیر 1386, 03:24 صبح
با اینکه سعی کردی از جملات قشنگی استفاده کنی ولی چیزایی که گفتی درست نیست ، البته نیمخوام د مورد اینکه OOP خوبه یا بده بحث فلسفی بکنم چون متاسفانه اکثر بحثهای اینجا بجای اینکه به نتیجه گیری علمی ختم بشه به قفل و کلید و کلون ختم میشه ولی نه از زبان خودم که از زبان افراد صاحب نظر بهت میگم که OOP و حفظ قواعدش رو بصورت کامل و دقیق و بدون تنبلی اولین اصل برنامه نویسیت قرار بده ، اگر میخوای روزی بجای کدنویس برنامه نویس و طراح سیستم بشی .
منظورم هم از سیستم یک سیستم به معنی واقعی هست.

جدای از این مباحث اگر روزی برنامه نویسی OOP رو کامل فهمیدی اون روز بهت قول میدم که لذت برنامه نویسی برات چندین برابر میشه و دیگه امکان نداره حاضر بشی بزاریش کنار و تبلیغ اسپاگتی بکنی.

کسی تبلیغ اسپاگتی نمیکنه، خواستم بگم که اگر یک روشی آسان است دلیل بر درستی‌اش نیست.
در ضمن همانطوری که گفتم OOP اولین پله است، اگر یکمقداری Object Oriented Design Patterns را مطالعه کنید متوجه میشید.
یکی از کتابهایه پترن با این جمله شروع شده بود:" با اینکه تمام اصول OOP را رعایت میکردم بازهم یک چیزی کم بود".
مثالهایی که زدم برایه این بود که حتی با رعایت قوائد OOP بازهم کافی نیست، نه اینکه شکستنش خوبه.
در طراحی سیستم یکسال بعد از اینکه برنامه نویسی را شروع کردم از ۳ لایه کمتر کار نکردم،فکر میکنید سیستمهایی که ساختم به اندازه کافی واقعی هستند؟
روشی را که شما گفتید از همه روشهایه دیگر بهتر است و تنها به دلیل OOP بودنش.
از لحاظ ابتدائی به نظر OOP میاد ولی زیادی استفاده کردن از inehritence یکی از مشکلات طراحی سیستمها با OOP است.
در این مشکل استفاده کردن از وراثت برایه حل این مسئله هیچ دلیلی نداشت.
اگر واقعا میخواهید از کد نویسی به طراحی سیستمها (چه واقعی و چه تفریحى) برسید، OOP را را اولین پله در این راه بدانید و به مطالعه Object Oriented Design Patterns بپردازید.
برایه شروع من کتاب Design Patterns Explained را توصیه میکنم.
http://www.amazon.com/Design-Patterns-Explained-Perspective-Object-Oriented/dp/0201715945

ghabil
پنج شنبه 07 تیر 1386, 13:43 عصر
در طراحی سیستم یکسال بعد از اینکه برنامه نویسی را شروع کردم از ۳ لایه کمتر کار نکردم،فکر میکنید سیستمهایی که ساختم به اندازه کافی واقعی هستند؟
[/Qoute]
من در حدی نیستم که بخوام نظر بدم و با این اطلاعات م نمیشه نظر داد ،اما اگر خودت میدونی که بودن خوب حتما بودند.

[QUOTE=اَرژنگ;359202]
روشی را که شما گفتید از همه روشهایه دیگر بهتر است و تنها به دلیل OOP بودنش.
از لحاظ ابتدائی به نظر OOP میاد ولی زیادی استفاده کردن از inehritence یکی از مشکلات طراحی سیستمها با OOP است.
در این مشکل استفاده کردن از وراثت برایه حل این مسئله هیچ دلیلی نداشت.
[/Qoute]
میگم فقط میخواهید اینجا بحث کنید ، Abstraction بنظر من مهمترین امکان OOP هست و هیچ وقت هیچ مشکلی نداشته !! شاید بهتر باشه بیشتر از این هم در این زمینه توضیح ندی!
ضمنا میتونستی بجای اینکه بگی هیچ دلیل نداره بپرسی دلیلش چیه ; برای نمونه فرض کن به دلیلی نمی خواستیم در بعضی از فرمها تغییرات رو اعمال کنیم یا در بعضی میخواستیم مثلا یک تغییر دیگه هم بدهیم ، مقایسه کن ببین تو هرکدوم از روشها بجز این روش چقدر کار می برد و در این روش چقدر کار ساده هست .

[QUOTE=اَرژنگ;359202]
اگر واقعا میخواهید از کد نویسی به طراحی سیستمها (چه واقعی و چه تفریحى) برسید، OOP را را اولین پله در این راه بدانید و به مطالعه Object Oriented Design Patterns بپردازید.
برایه شروع من کتاب Design Patterns Explained را توصیه میکنم.
http://www.amazon.com/Design-Patterns-Explained-Perspective-Object-Oriented/dp/0201715945

این حرف شما مثل این میمونه که بگویید : دلفی بدون فلان کامپننت جانبی یک چیزی کم داره !
بنظر من OOP اول و آخر برنامه نویسی در نسل فعلی هست که روز به روز هم بیشتر مهم میشه و به همین خاطر هم هست که براش Extensionهایی مثل همین Design Patterns ساخته میشند تا کار باهاش رو بهتر بکنند. برای همین هم به همه دوستانی که در اوایل مسیر یادگیری هستند همیشه توصیه کردم و میکنم که از اصولی یاد گرفتن OOP غافل نشید . شما و سایر اساتید هم نظراتتون متین هست و حتما تجاربی دارید که من ندارم و به همین دلیل هم اینجا هستم که بتونم از تجربیات شما هم استفاده کنم.

اَرژنگ
پنج شنبه 07 تیر 1386, 19:13 عصر
میگم فقط میخواهید اینجا بحث کنید ، Abstraction بنظر من مهمترین امکان OOP هست و هیچ وقت هیچ مشکلی نداشته !! شاید بهتر باشه بیشتر از این هم در این زمینه توضیح ندی!
ضمنا میتونستی بجای اینکه بگی هیچ دلیل نداره بپرسی دلیلش چیه ; برای نمونه فرض کن به دلیلی نمی خواستیم در بعضی از فرمها تغییرات رو اعمال کنیم یا در بعضی میخواستیم مثلا یک تغییر دیگه هم بدهیم ، مقایسه کن ببین تو هرکدوم از روشها بجز این روش چقدر کار می برد و در این روش چقدر کار ساده هست .

این راحتی نیست، این دیسیپلین نداشتن و با تنبلی این مشکل را حل کردن است. همانطور که گفتم این روش Business Logic را به GUI برنامه گره میزنه. در سطح پائینی مشکل را حل میکند ولی مشکلات دیگری که بوجود میاره به راحت بودن اینکار (از لحاظ تنبلی ) نمیارزه.
در ضمن این Abstraction نیست که ایراد داره بلکه روشی که ازش داره استفاده میشه. نمیشه همه چیز را میخ ‌تلقی کرد و فقط با یک چکش کوبیدش.




این حرف شما مثل این میمونه که بگویید : دلفی بدون فلان کامپننت جانبی یک چیزی کم داره !
بنظر من OOP اول و آخر برنامه نویسی در نسل فعلی هست که روز به روز هم بیشتر مهم میشه و به همین خاطر هم هست که براش Extensionهایی مثل همین Design Patterns ساخته میشند تا کار باهاش رو بهتر بکنند. برای همین هم به همه دوستانی که در اوایل مسیر یادگیری هستند همیشه توصیه کردم و میکنم که از اصولی یاد گرفتن OOP غافل نشید . شما و سایر اساتید هم نظراتتون متین هست و حتما تجاربی دارید که من ندارم و به همین دلیل هم اینجا هستم که بتونم از تجربیات شما هم استفاده کنم.
خیر، هیچ هم به نداشتن یک کمپوننت دردلفی نمیماند! بلکه مثل نداشتن تمام کمپوننتها در دلفی میماند.
اگر OOP ردیف کردن آجربود برایه ساختن دیوار باشد، Design Patterns نهوه سرهم کردن دیوارهاست که ساختمان درست سرهم شده باشه.
Design Patterns اکستنشنی بر OOP نیست بلکه روشهایه درست استفاده کردن از OOP است.
شما کاملا درست میگید OOP اولین اصولی است که باید یاد گرفته بشه.
OO Application Arhitecture and Design
و
OO Design Patterns
روشهایه درست استفاده از اصول OOP را یاد میدند.
من از نظر تجربه حدی نیستم که بتوانم چیزی یاد بدم، تازه امیدم هم به این است که کسانی که به این مطالب نگاه بندازند اشکلات من را بگیرند و به راه راست هدایت کنند (:

ghabil
جمعه 08 تیر 1386, 01:40 صبح
این راحتی نیست، این دیسیپلین نداشتن و با تنبلی این مشکل را حل کردن است. همانطور که گفتم این روش Business Logic را به GUI برنامه گره میزنه. در سطح پائینی مشکل را حل میکند ولی مشکلات دیگری که بوجود میاره به راحت بودن اینکار (از لحاظ تنبلی ) نمیارزه.
در ضمن این Abstraction نیست که ایراد داره بلکه روشی که ازش داره استفاده میشه. نمیشه همه چیز را میخ ‌تلقی کرد و فقط با یک چکش کوبیدش.


من نمیخوام باهات کلکل بکنم ولی اینایی که میگی رو برو به یکی که از لحاظ فنی قبولش داری نشون بده ازش نظرشو بپرس. به هر حال ممنون.

اَرژنگ
جمعه 08 تیر 1386, 13:37 عصر
من نمیخوام باهات کلکل بکنم ولی اینایی که میگی رو برو به یکی که از لحاظ فنی قبولش داری نشون بده ازش نظرشو بپرس. به هر حال ممنون.
قصد کل کل نبود، فقط اینکه سعی کردم بگم که OOP بدونه درک عمییقتر از نهوهایه استفاده‌اش فایده واقعیش بدست نمیاد،
این مطالبی را هم که گفتم الان بعد از ۱۰ سال امتحان و تجربه و گوش کردن به کسانیکه واقعا در این زمینه واردن جرعت میکنم که بگم ، وگرنه اگر فقط فکر میکردم نظر من است ، هیچ چی نمیگفتم .
مخلصیم.

اَرژنگ
شنبه 09 تیر 1386, 23:24 عصر
من نمیخوام باهات کلکل بکنم ولی اینایی که میگی رو برو به یکی که از لحاظ فنی قبولش داری نشون بده ازش نظرشو بپرس. به هر حال ممنون.
به کتابی که قبلاً در پستم اشاره کردم مراجعه کردم.
دلایل حرفهایی که گفتم افزایش به cohesion در لایه منطق برنامه و کم کردن coupling بین منطق برنامه و GUI از میباشد.

با عرض پوزش که دلایل و رفرانس کامل نداده حرف زدم.
فارسیه کلمات GUI, coupling و cohesion چیه؟

omid_delphi2
سه شنبه 21 اسفند 1386, 11:09 صبح
سلام بالاخره ما نفهمیدیم ک با سرکش فارسی یا ک بدون سرکش
همین مشکل را هم با ی دارم
و اینکه کد هر کدوم چیه؟

SYNDROME
سه شنبه 21 اسفند 1386, 15:57 عصر
سلام بالاخره ما نفهمیدیم ک با سرکش فارسی یا ک بدون سرکش
همین مشکل را هم با ی دارم
و اینکه کد هر کدوم چیه؟
کدهای را به شکل زیر اصلاح کنید.


IF Key = #152 Then Key := #223;
IF Key = #236 Then Key := #237;

موفق باشید

iranianprogrammers
سه شنبه 21 اسفند 1386, 18:37 عصر
حالا این جا یه بحث پیش میاد .
فرض کنید شما یه برنامه ورود اطلاعات به کاربر دادید .
حالا اگه کاربر اطلاعات رو از یه جا مثل یه صفحه اینترنتی کپی و Paste کنه .
آیا این روش جواب میده ؟

SYNDROME
پنج شنبه 01 فروردین 1387, 21:38 عصر
حالا این جا یه بحث پیش میاد .
فرض کنید شما یه برنامه ورود اطلاعات به کاربر دادید .
حالا اگه کاربر اطلاعات رو از یه جا مثل یه صفحه اینترنتی کپی و Paste کنه .
آیا این روش جواب میده ؟
در چنین مواقعی می توانی در هنگام ذخیره اطلاعات حروف فوق را اصلاح کنید و بعد از اصلاح اطلاعات تغییر یافته را ذخیره کنید.
موفق باشید

ali_abbasi22145
دوشنبه 02 دی 1387, 13:05 عصر
سلام و تشكر از همه دوستان

من چطور فيلد Title بانكم كه با "ك" , "ي" بزرگ و كوچك ايراددار Import شده به "ك" , "ي" بزرگ و كوچك درست تبديل كنم؟

Alir431
چهارشنبه 02 دی 1388, 15:44 عصر
سلام
یکی از کاربران قطعه کد زیر رو ارسال کردن. من نمی‌تونم از این کد استفاده کنم، لطفا کمک کنید.




unit Unit_FarsiFixer;
interface
uses
Forms,
Controls,
SysUtils,
Dialogs,
Classes;
type
TFarsiKeyboardHook = class(TComponent)
private
parentKeyPress: TKeyPressEvent;
procedure myKeyPress(Sender: TObject; var Key: Char);
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Barnamenevis.org', [TFarsiKeyboardHook]);
end;
{ TFarsiKeyboardHook }
constructor TFarsiKeyboardHook.Create(AOwner: TComponent);
begin
inherited;
IF AOwner is TForm then
begin
parentKeyPress := TForm(Owner).OnKeyPress;
TForm(Owner).OnKeyPress := myKeyPress;
TForm(Owner).KeyPreview := true;
end;
end;
procedure TFarsiKeyboardHook.myKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #223 then Key := #152;
if Key = #236 then Key := #237;
if Assigned(parentKeyPress) then
parentKeyPress(Sender, Key);
end;
end.

mah_par2009
شنبه 17 بهمن 1388, 18:43 عصر
باسلام
فایل kbdfa.dll ضميمه را در شاخه های زیر به ترتیب کپی کنید و سپس پیغامی که ظاهر می شود را cancel کنید
c:\windows\system32\dllcache
c:\windows\system32
سپس سیتم رو reset کنید مشکلتون حل می شه.

SYNDROME
یک شنبه 18 بهمن 1388, 06:19 صبح
باسلام
فایل kbdfa.dll ضمیمه را در شاخه های زیر به ترتیب کپی کنید و سپس پیغامی که ظاهر می شود را cancel کنید
c:\windows\system32\dllcache
c:\windows\system32
سپس سیتم رو reset کنید مشکلتون حل می شه.
با سلام
البته به مشکلات این روش هم قبلاً اشاره شده است.
موفق باشید

joker
پنج شنبه 19 اسفند 1389, 18:10 عصر
یک مشکلی دارم در این رابطه
فایلهایی دارم که با حرف ی ساخته شده اند
با استفاده از سورس زیر لیست فایلها و ساب فولدرها را میگیرم ولی فولدرها یا فایلهایی که حرف ی معمولی توش بکار رفته را تشخیص نمیده ، ولی" ي " اصطلاحا ی نقطه دار( shift +X) را بی مشکل تشخیص میده
چه پیشنهادی میدین؟ ( دلفی آخرش ورژن موجود هم 7 دارم :) به نظرتون چه کنم که مشکل بشه ؟


http://www.festra.com/eng/snip04.htm

Mask
پنج شنبه 19 اسفند 1389, 22:11 عصر
با سلام
منم همچین مشکلی روبرو بودم. در مورد md5 کردن فایلهایی با این حروف. دسته آخر مجبور به اسباب کشی به دلفی 2009 به بعد شدم.
موفق باشی.

MohsenB
جمعه 20 اسفند 1389, 00:22 صبح
با سلام به همه دوستان

همه روشهایی که فرمودین خوبه و اون اولی هم به نظر من راحتتره ولی منم یه راهی بهتون میگم انشاء اله بدردتون بخوره :

این راه تمام مشکلاتی که برا قبلیا نقل شد رو نداره ، ببینید :

یه یونیت با این کدها درست کنید :




unit CorrectFar;

interface

uses
Windows, Messages, Dialogs,SysUtils, Variants, Classes;

const
c_CharCount=2;

type
TCharArray = array[1..c_CharCount]of Char;

var
S1: TCharArray=('ی' , 'ک');
S2: TCharArray=('ي' , 'ک');

function CF(txtIn :String):String;

implementation

function CharInTable(ch :Char):Byte;
var i :Byte;
begin
Result:= 0;
for i := 1 to c_CharCount do
if S1[i]=ch then begin
Result:= i;
Exit;
end;
end;

function CF(txtIn :String):String;
var i, r :integer;
begin
for i:= 1 to length(txtIn) do
begin
r:= CharInTable(txtIn[i]);
if r>0 then
txtIn[i]:= S2[r];
end;
end;

end.



حالا هر جا میخواید کلمه ای رو اصلاح کنید اول یونیت رو اعلام کنید :


Uses CorrectFar;

بعد بجای همچین خطی :

db1:= Edit1.Text;

یه همچین خطی بنویسید :


db1:= CF(Edit1.Text);

یا اینجوری بنویسید :


Edit1.Text:= CF(Edit1.Text);


این روش این مزیتها رو داره :



فقط یک بار یک متن داخل یک شیء تبدیل میشه اونم هنگام کاربرد .
اگر کاربر متن رو از جای دیگه آورده باشه اصلاح میشه .
ساده هست .
امکان تغییر رو به دلخواه داره .
امکان اضافه کردن امکانات بیشتر رو داره .
به هر شیء ، متن و یا هر چیز دیگه قابل تعمیمه .
هر تعداد کاراکتر رو که میخواید عوضشون کنید می تونید بدون دستکاری تو کد اضافه کنید .
و ...


موفق و سربلند باشید .

seyed_farid
یک شنبه 22 اسفند 1389, 10:28 صبح
چرا از تابع StringReplace استفاده نمي كنيد؟:متفکر:

seyed_farid
یک شنبه 22 اسفند 1389, 10:48 صبح
چرا از تابع StringReplace
و يا

function ReplaceChar(s:string;c:char;charrep:char):string;
begin
while pos(c,s)>0 do
s[pos(c,s)]:=charrep;
ReplaceChar:=s;
end;
استفاده نمي كنيد؟:متفکر:

MohsenB
یک شنبه 22 اسفند 1389, 14:47 عصر
سلام

اونم یه راهشه
از اونم می تونید استفاده کنید . ولی نه این راهی که رفتین . راه حل بهتری هم داره .