با سلام
با اجازه کاربر 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.
امیدوارم از کار بنده ناراحت نشده باشید.
این کامپونت را تست کردم درست جواب داد.
با تشکر فراوان.
با اینکه سعی کردی از جملات قشنگی استفاده کنی ولی چیزایی که گفتی درست نیست ، البته نیمخوام د مورد اینکه 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-Pattern.../dp/0201715945
[QUOTE=اَرژنگ;359202]در طراحی سیستم یکسال بعد از اینکه برنامه نویسی را شروع کردم از ۳ لایه کمتر کار نکردم،فکر میکنید سیستمهایی که ساختم به اندازه کافی واقعی هستند؟
[/Qoute]
من در حدی نیستم که بخوام نظر بدم و با این اطلاعات م نمیشه نظر داد ،اما اگر خودت میدونی که بودن خوب حتما بودند.
[QUOTE=اَرژنگ;359202]
روشی را که شما گفتید از همه روشهایه دیگر بهتر است و تنها به دلیل OOP بودنش.
از لحاظ ابتدائی به نظر OOP میاد ولی زیادی استفاده کردن از inehritence یکی از مشکلات طراحی سیستمها با OOP است.
در این مشکل استفاده کردن از وراثت برایه حل این مسئله هیچ دلیلی نداشت.
[/Qoute]
میگم فقط میخواهید اینجا بحث کنید ، Abstraction بنظر من مهمترین امکان OOP هست و هیچ وقت هیچ مشکلی نداشته !! شاید بهتر باشه بیشتر از این هم در این زمینه توضیح ندی!
ضمنا میتونستی بجای اینکه بگی هیچ دلیل نداره بپرسی دلیلش چیه ; برای نمونه فرض کن به دلیلی نمی خواستیم در بعضی از فرمها تغییرات رو اعمال کنیم یا در بعضی میخواستیم مثلا یک تغییر دیگه هم بدهیم ، مقایسه کن ببین تو هرکدوم از روشها بجز این روش چقدر کار می برد و در این روش چقدر کار ساده هست .
این حرف شما مثل این میمونه که بگویید : دلفی بدون فلان کامپننت جانبی یک چیزی کم داره !
بنظر من OOP اول و آخر برنامه نویسی در نسل فعلی هست که روز به روز هم بیشتر مهم میشه و به همین خاطر هم هست که براش Extensionهایی مثل همین Design Patterns ساخته میشند تا کار باهاش رو بهتر بکنند. برای همین هم به همه دوستانی که در اوایل مسیر یادگیری هستند همیشه توصیه کردم و میکنم که از اصولی یاد گرفتن OOP غافل نشید . شما و سایر اساتید هم نظراتتون متین هست و حتما تجاربی دارید که من ندارم و به همین دلیل هم اینجا هستم که بتونم از تجربیات شما هم استفاده کنم.
این راحتی نیست، این دیسیپلین نداشتن و با تنبلی این مشکل را حل کردن است. همانطور که گفتم این روش Business Logic را به GUI برنامه گره میزنه. در سطح پائینی مشکل را حل میکند ولی مشکلات دیگری که بوجود میاره به راحت بودن اینکار (از لحاظ تنبلی ) نمیارزه.
در ضمن این Abstraction نیست که ایراد داره بلکه روشی که ازش داره استفاده میشه. نمیشه همه چیز را میخ تلقی کرد و فقط با یک چکش کوبیدش.
خیر، هیچ هم به نداشتن یک کمپوننت دردلفی نمیماند! بلکه مثل نداشتن تمام کمپوننتها در دلفی میماند.
اگر OOP ردیف کردن آجربود برایه ساختن دیوار باشد، Design Patterns نهوه سرهم کردن دیوارهاست که ساختمان درست سرهم شده باشه.
Design Patterns اکستنشنی بر OOP نیست بلکه روشهایه درست استفاده کردن از OOP است.
شما کاملا درست میگید OOP اولین اصولی است که باید یاد گرفته بشه.
OO Application Arhitecture and Design
و
OO Design Patterns
روشهایه درست استفاده از اصول OOP را یاد میدند.
من از نظر تجربه حدی نیستم که بتوانم چیزی یاد بدم، تازه امیدم هم به این است که کسانی که به این مطالب نگاه بندازند اشکلات من را بگیرند و به راه راست هدایت کنند (:
قصد کل کل نبود، فقط اینکه سعی کردم بگم که OOP بدونه درک عمییقتر از نهوهایه استفادهاش فایده واقعیش بدست نمیاد،
این مطالبی را هم که گفتم الان بعد از ۱۰ سال امتحان و تجربه و گوش کردن به کسانیکه واقعا در این زمینه واردن جرعت میکنم که بگم ، وگرنه اگر فقط فکر میکردم نظر من است ، هیچ چی نمیگفتم .
مخلصیم.
سلام بالاخره ما نفهمیدیم ک با سرکش فارسی یا ک بدون سرکش
همین مشکل را هم با ی دارم
و اینکه کد هر کدوم چیه؟
حالا این جا یه بحث پیش میاد .
فرض کنید شما یه برنامه ورود اطلاعات به کاربر دادید .
حالا اگه کاربر اطلاعات رو از یه جا مثل یه صفحه اینترنتی کپی و Paste کنه .
آیا این روش جواب میده ؟
سلام و تشكر از همه دوستان
من چطور فيلد Title بانكم كه با "ك" , "ي" بزرگ و كوچك ايراددار Import شده به "ك" , "ي" بزرگ و كوچك درست تبديل كنم؟
سلام
یکی از کاربران قطعه کد زیر رو ارسال کردن. من نمیتونم از این کد استفاده کنم، لطفا کمک کنید.
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.
آخرین ویرایش به وسیله Alir431 : چهارشنبه 02 دی 1388 در 16:55 عصر
باسلام
فایل kbdfa.dll ضميمه را در شاخه های زیر به ترتیب کپی کنید و سپس پیغامی که ظاهر می شود را cancel کنید
c:\windows\system32\dllcache
c:\windows\system32
سپس سیتم رو reset کنید مشکلتون حل می شه.
یک مشکلی دارم در این رابطه
فایلهایی دارم که با حرف ی ساخته شده اند
با استفاده از سورس زیر لیست فایلها و ساب فولدرها را میگیرم ولی فولدرها یا فایلهایی که حرف ی معمولی توش بکار رفته را تشخیص نمیده ، ولی" ي " اصطلاحا ی نقطه دار( shift +X) را بی مشکل تشخیص میده
چه پیشنهادی میدین؟ ( دلفی آخرش ورژن موجود هم 7 دارم :) به نظرتون چه کنم که مشکل بشه ؟
http://www.festra.com/eng/snip04.htm
با سلام
منم همچین مشکلی روبرو بودم. در مورد md5 کردن فایلهایی با این حروف. دسته آخر مجبور به اسباب کشی به دلفی 2009 به بعد شدم.
موفق باشی.
با سلام به همه دوستان
همه روشهایی که فرمودین خوبه و اون اولی هم به نظر من راحتتره ولی منم یه راهی بهتون میگم انشاء اله بدردتون بخوره :
این راه تمام مشکلاتی که برا قبلیا نقل شد رو نداره ، ببینید :
یه یونیت با این کدها درست کنید :
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);
این روش این مزیتها رو داره :
- فقط یک بار یک متن داخل یک شیء تبدیل میشه اونم هنگام کاربرد .
- اگر کاربر متن رو از جای دیگه آورده باشه اصلاح میشه .
- ساده هست .
- امکان تغییر رو به دلخواه داره .
- امکان اضافه کردن امکانات بیشتر رو داره .
- به هر شیء ، متن و یا هر چیز دیگه قابل تعمیمه .
- هر تعداد کاراکتر رو که میخواید عوضشون کنید می تونید بدون دستکاری تو کد اضافه کنید .
- و ...
موفق و سربلند باشید .
آخرین ویرایش به وسیله MohsenB : جمعه 20 اسفند 1389 در 01:34 صبح
چرا از تابع StringReplace استفاده نمي كنيد؟
چرا از تابع 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;
استفاده نمي كنيد؟
سلام
اونم یه راهشه
از اونم می تونید استفاده کنید . ولی نه این راهی که رفتین . راه حل بهتری هم داره .