ورود

View Full Version : روش مناسب برای استفاده فرم جستجو



Delphi7_love
یک شنبه 04 مهر 1389, 13:45 عصر
با سلام خدمت دوستان
یه برنامه دارم که حدود 60 تا فرم داره که در 40 تای این فرم ها نیاز به جستجو مربوط به همون فرم رو دارم ، حالا اگه بخوام واسه هر 40 تا فرم یه فرم جدا واسه جستجو داشته باشم تعداد فرم ها زیاد میشه ، چه راه حلی برای اینکار پیشنهاد می کنید که بهینه تر باشه؟
در ضمن جستجوی تمام فرم ها با هم تفاوت داره.
با تشکر از دوستان

devil00x
یک شنبه 04 مهر 1389, 14:29 عصر
می تونی یک فرم قرار بدی و موقع نمایش داده یک پارامتر رو چک کنی و مواقع فراخوانی اشیاء فرمت رو ایجاد کنی .
مثلا اگر از فرم 1 فراخانی شد این اشیاء رو ایجاد کن و اگر از فرم 2 فراخوانی شد این اشیاء و توابع مخصوص به خودش رو بهش ربط بده .

Delphi7_love
یک شنبه 04 مهر 1389, 15:40 عصر
ممنون از پاسختون
نمیدونم چطور باید این کارو انجام بدم ، ممنون میشم کامل توضیح بدبد.
در ضمن اگرم اشیا رو ایجاد کنم مشکل دیگه ام اینه که نمیدونه چطور این اشیا رو کد نویسی کنم ، چون زمان کدنویسی اشیا وجود ندارند و خطا میگیره.

اگه واسه هر فرم یه پنل روی فرم جستجو داشته باشم و ذوی هر پنل اشیا مربوط به هر فرم رو بذارم و هنگام جستجو این پنل ها رو فراخوانی کنم مشکلش چیه؟

devil00x
یک شنبه 04 مهر 1389, 15:53 عصر
ببینید مشکلی نداره که قبلا پانل هاتون رو ایجاد کنید فقط فرمتون یه خورده شلوغ میشه و حجم برنامه تون زیاد میشه


var
btn1:TBUTTON;
.
.
.
btn:=TBUTTON.Create(self);
btn.parent:=form1;
btn.left:=12;
btn1.top:=20;
btn1.onclick:=event1;
btn1.show;

کد بالا یک نمونه برای ساخت اشیاء و برای ایجاد اشیاء هم می تونید تو سایت یه سرچ بزنید بهتون اطلاعات بیشتری میده.

SAASTN
یک شنبه 04 مهر 1389, 16:02 عصر
در ضمن جستجوی تمام فرم ها با هم تفاوت داره.
جستجوها دقیقا چه تفاوتی با هم دارند؟ یه وقت ممکنه تنها در حد ست کردن متن یه Query باشه و نیازی نباشه فرم تا این حد از پایه ساخته بشه.

Delphi7_love
یک شنبه 04 مهر 1389, 19:35 عصر
ممنون


ببینید مشکلی نداره که قبلا پانل هاتون رو ایجاد کنید فقط فرمتون یه خورده شلوغ میشه و حجم برنامه تون زیاد میشه


var
btn1:TBUTTON;
.
.
.
btn:=TBUTTON.Create(self);
btn.parent:=form1;
btn.left:=12;
btn1.top:=20;
btn1.onclick:=event1;
btn1.show;

کد بالا یک نمونه برای ساخت اشیاء و برای ایجاد اشیاء هم می تونید تو سایت یه سرچ بزنید بهتون اطلاعات بیشتری میده.

چطور مثلا همین باتن که ایجاد کرده ایم رو کد نویسی کنیم ؟


جستجوها دقیقا چه تفاوتی با هم دارند؟ یه وقت ممکنه تنها در حد ست کردن متن یه Query باشه و نیازی نباشه فرم تا این حد از پایه ساخته بشه.

هر جستجو از یه تیبل جداست
من واسه query ها مشکلی ندارم
مشکل سر اشیاست که چطور طراحی شه که حجم کمتری رو اشغال کنن.

SAASTN
دوشنبه 05 مهر 1389, 06:58 صبح
چطور مثلا همین باتن که ایجاد کرده ایم رو کد نویسی کنیم ؟
توی کدی که devil00x گذاشتند این امر با Event1 انجام شده، داخل فرمتون یه Procedure به صورت زیر تعریف کنید و به OnClick دکمه اختصاص بدین:
procedure Event1(Sender: TObject);

هر جستجو از یه تیبل جداست
من واسه query ها مشکلی ندارم
مشکل سر اشیاست که چطور طراحی شه که حجم کمتری رو اشغال کنن.
منظورم اینه که فرمها تفاوت ظاهری هم با هم دارند؟ اگه نداشته باشن با چندتا آرایه میشه درستش کرد. مثلا عکس زیر می تونه یه نمونه از فرم ما باشه که برای جستجوی دانشجو بر اساس شماره دانشجویی طراحی شده، حالا ما می خوایم از همین فرم برای جستجوی دانشجو بر اساس نام دانشجو یا جستجوی استاد و درس و ... استفاده کنیم. در اینجا تفاوتی که بین فرمها بوجود میاد عبارته از تغییر چندتا متن و خود عمل اصلی جستجو، که مثلا میشه به شکل زیر پیادش کرد:
type
TSearchType = (
stFindStudentByID,
stFindStudentByName,
stFindTeacherByID,
stFindTeacherByName,
stFindCourseByID);
TSearchForm = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
private
procedure FindStudentByID(const StudentID: string);
procedure FindStudentByName(const StudentName: string);
procedure FindTeacherByID(const TeacherID: string);
procedure FindTeacherByName(const TeacherName: string);
procedure FindCourseByID(const CourseID: string);
public
function DoSearch(const SearchType: TSearchType): Integer;
end;

var
SearchForm: TSearchForm;

implementation
const
FormCaptions : array [TSearchType] of string = (
'جستجوی دانشجو',
'جستجوی دانشجو',
'جستجوی استاد',
'جستجوی استاد',
'جستجوی درس');
LabelCaptions : array [TSearchType] of string = (
'شماره دانشجویی',
'نام دانشجو',
'کد استاد',
'نام استاد',
'کد درس');

{$R *.dfm}

{ TSearchForm }

function TSearchForm.DoSearch(const SearchType: TSearchType): Integer;
begin
Caption := FormCaptions[SearchType];
Label1.Caption := LabelCaptions[SearchType];
Result := Self.ShowModal;
if ModalResult = mrOk then
case SearchType of
stFindStudentByID: FindStudentByID(Edit1.Text);
stFindStudentByName: FindStudentByName(Edit1.Text);
stFindTeacherByID: FindTeacherByID(Edit1.Text);
stFindTeacherByName: FindTeacherByName(Edit1.Text);
stFindCourseByID: FindCourseByID(Edit1.Text);
end;
end;

procedure TSearchForm.FindCourseByID(const CourseID: string);
begin

end;

procedure TSearchForm.FindStudentByID(const StudentID: string);
begin

end;

procedure TSearchForm.FindStudentByName(const StudentName: string);
begin

end;

procedure TSearchForm.FindTeacherByID(const TeacherID: string);
begin

end;

procedure TSearchForm.FindTeacherByName(const TeacherName: string);
begin

end;

Delphi7_love
دوشنبه 05 مهر 1389, 13:53 عصر
متشکرم دوست عزیز

این روش خیلی عالیه ولی به شرطی که تعداد اشیا که روی فرم میذاریم یکی باشه.
من واسه جستجوی هر فرم تعداد ادیت ها و کمبوباکس های متفاوتی دارم
مثلا برای یک فرم 2 تا و برای یک فرم 10 تا
ممنون از اینکه وقت میذارید

SAASTN
دوشنبه 05 مهر 1389, 14:13 عصر
باز اگه من باشم برای Visible اشیائم به همون ترتیب آرایه تعریف می کنم. باید ببینید چطور راحت تره، مثلا می تونید فرمهاتون رو با توجه به ملاکهایی که خودتون می دونید تقسیم بندی کنید، بخش مشترک رو توی یک فرم پیاده سازی کنید و بقیه بخشهارو توی فرمهایی که از فرم اصلی مشتق کردید پیاده کنید.
به هرصورت ایجاد چندین فرم با کد خیلی کمتر از دیزاین تک تکشون زمان نمی بره.

devil00x
دوشنبه 05 مهر 1389, 14:50 عصر
من هم با SAASTN موافقم ، این ایده که گفت حالا حتما تو یک فرم نباشه مثلا 2-3 تا فرم باشه هر چندتایی که میتونی تو یک فرم طراحی کنی که شباهت بیشتری به هم دارند.

AbiriAmir
سه شنبه 06 مهر 1389, 15:28 عصر
من جای شما بودم کنترل هام رو تو تب میزاشتم
نهایتش اینه که تو حالات مختلف تب ها رو قفل میکنی و فقط یک تب رو باز میزاری یا مخفیشون میکنی
با کنترل page control

SAASTN
سه شنبه 06 مهر 1389, 20:05 عصر
من جای شما بودم کنترل هام رو تو تب میزاشتم
نهایتش اینه که تو حالات مختلف تب ها رو قفل میکنی و فقط یک تب رو باز میزاری یا مخفیشون میکنی
با کنترل page control
خوب در اینصورت که فرقی نمی کنه. بجای 40تا فرم جستجو باید 40تا تب طراحی بشه. اما اگه به این روش هم بخواد پیاده سازی بشه بازم فکر کنم استفاده از Frame اصولی تره.