PDA

View Full Version : سوال: مشکل در استفاده از Fram



Mask
یک شنبه 04 دی 1390, 17:57 عصر
با سلام
یک شی sFrameBar مجموعه آلفا کنترل روی فرم گزاشتم.
سپس یک Frame به برنامه add کردم .
درون این Frame یک باتن قرار دادم.
چطوری باید کپشن این دکمه که درون این Frame هست رو مثلا از Form Show مقدار دهی کرد.؟
ممنون.کارم گیر کرده.!!

vcldeveloper
یک شنبه 04 دی 1390, 18:22 عصر
از طریق همون شی frame ایی که در فرم ایجاد کردید؛ فرضا:


Form1.MyFrame.MyButton.Caption := 'Test';

Mask
یک شنبه 04 دی 1390, 18:45 عصر
ممنون از استاد بزرگوارم.
نمیدونم چرا اصلا Frame رو نمیشناسه با اینکه یونیتش رو هم use کردم.
اگه محبت کنید نمونه زیر رو یه نگاه بکنید.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, sScrollBox, sFrameBar, sSkinProvider, sSkinManager, StdCtrls;

type
TForm1 = class(TForm)
sFrameBar1: TsFrameBar;
sSkinManager1: TsSkinManager;
sSkinProvider1: TsSkinProvider;
Button1: TButton;
procedure sFrameBar1Items0CreateFrame(Sender: TObject;
var Frame: TCustomFrame);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.sFrameBar1Items0CreateFrame(Sender: TObject;
var Frame: TCustomFrame);
begin
Frame := TFrame2.Create(nil);
end;

end.

vcldeveloper
یک شنبه 04 دی 1390, 23:15 عصر
نمیدونم چرا اصلا Frame رو نمیشناسه با اینکه یونیتش رو هم use کردم.
من با اون کامپوننت Alpha کار نکردم و نمیدونم دقیقا قراره با این فریمی که ساختید چیکار کنه، اما کدی که اینجا گذاشتید، از نظر Syntax درست هست؛ و قاعدتا باید یک نمونه از کلاس TFrame2 که در Unit2 تعریف شده را بسازه، و به پارامتر Frame در متد sFrameBar1Items0CreateFrame اختصاص بده. حالا نمیدونم منظورتون از نشناختن Frame دقیقا چی هست؟

Mask
دوشنبه 05 دی 1390, 10:23 صبح
ممنونم از استاد عزیز

منظورتون از نشناختن Frame دقیقا چی هست
ببینید : با دستوری که نوشتم

Frame := TFrame2.Create(nil);
دقیقا Tframe2 در اولین ایندکس Framebar ساخته میشه.
اما مشکل اصلی من اینه که وقتی روی فرم اصلی برنامم یه دکمه میزارم و میخام دکمه ای که روی Frame هست رو تغییر کپشن بدم.اصلا دلفی میگه من توی فرم اصلی چیزی به نام Frame نمیشناسم .چه برسه که بخام اجازه بدم که دکمه رو تغییر کپشن بدید.
چرا اینطوریه؟
از روی فرم اصلی به ایونتها و خصوصیات کنترلهای موجود روی Frame دسترسی ندارم.
ممنون از اینکه جواب میدید.
راستی پس خود شما برای زیبا سازی برنامتون مگه از چی استفاده میکنید؟

gbg
دوشنبه 05 دی 1390, 11:15 صبح
سلام
اول اینکه دلفی دم دست ندارم الان ولی به نظر من و احتمالا دلفی بعد از ساختن فریم باید Frame.Parent:=Form1; رو بنویسی یعنی انکه حتمن پرنت می خواد.
دوم اینکه فریمت تو تابع sFrameBar1Items0CreateFrame تعریف شده و دلفی خارج از اون معلومه که نمیشناستش باید ببینی اسمش قبل از اینکه به تابع پاس بشه چی بوده

Mask
دوشنبه 05 دی 1390, 12:12 عصر
و تابع sFrameBar1Items0CreateFrame تعریف شده و دلفی خارج از اون معلومه که نمیشناستش
ممنون از شما.
چون ما یونیت مربوط به فریم رو یوز میکنیم در یونیت فرم اصلی . پس باید این فریم و کنترلهاش قابل دسترس باشند.
چرا نیستند رو نمیدونم.دارم دنباله راهه حل میگردم.
در ضمن حتی اگه پرنت فریم رو بزاریم رو Form1 بازم مشکل باقیست.چون ما در حالت دیزاین میخواهیم به مقادیر فریم دسترسی پیدا کنیم.اما نمیشه.

Mask
دوشنبه 05 دی 1390, 13:19 عصر
ممنوا زدو دوست عزیز
مشکلم حل شد.
گفتم بزارم اینجا دوستان استفاده کنند.
تنها جایی که ما دسترسی به مقادیر فرمها داریم همون sFrameBar1Items0CreateFrame هست . که به راحتی با یه هارد کست میشه این تغییر رو ایجاد کرد.

procedure TForm1.sFrameBar1Items0CreateFrame(Sender: TObject;
var Frame: TCustomFrame);
begin
Frame := TFrame2.Create(nil);
TFrame2(Frame).Button1.Caption:='New Caption';
end;

gbg
دوشنبه 05 دی 1390, 14:07 عصر
این هم یه نمونه
توجه کن که دکمه اول پرنت نداره و کار نمی کنه

دوم وقتی فورمت از کاستوم فریم مشتق شده نه TFrame2

Mask
دوشنبه 05 دی 1390, 14:41 عصر
این هم یه نمونه
توجه کن که دکمه اول پرنت نداره و کار نمی کنه

دوم وقتی فورمت از کاستوم فریم مشتق شده نه TFrame2
ممنون از وقتی که گزاشتید.
با روش شما با در نظر نگرفتن اهداف دیگه نمونه برنامه ،میشه نسبتا به جواب رسید.
اما بعد از استفاده نمونه کد شما در برنامه ، برنامه روال اصلیش از بین میره و فریم بر روی فرم اصلی ساخته میشه. و کلا SFramebar از بین میره.
اما در کل ازتون ممنونم.

Mask
دوشنبه 05 دی 1390, 17:31 عصر
وای
چقدر گیر داره این فریم.
مشکل اولیه پا برجاست.
با اینکه حین ساخت فریم در فریم بار میشه مقادیر کنترلها رو تغییر داد اما مشکل اصلی میمونه و اونم اینه که الان با یه تایمر میخام مقدار یه لیبل روی فریم رو یکی یکی اضافه کنم.
بازم نمیشه.
چی پیشنهاد میکنید.؟
فقط حین ساخت فریم میشه به کنترلها مقدار داد.

gbg
دوشنبه 05 دی 1390, 21:03 عصر
عزیزم اگه کد من رو دیده بودی می دیدی که کپشن رو در زمان اجرا تغییر دادم

Mask
دوشنبه 05 دی 1390, 21:20 عصر
عزیز دل برادر کدتون رو دیدم. کلی هم ازش ایده گرفتم.
اما داستان اینه که چون ما در حالت run time یک نمونه از Frame رو بر روی Frame bare میسازیم. نمیتونیم مقدارش رو بعد از create شدن تغییر بدیم.
منم به خاطر این محدودیت مجبور شدم با یه ترفند مقادیرم رو در یک متغیرکه در فرم اصلی هست، حساب کتاب کنم و با یه تایمر که درون Frame استارت میشه مقدار متغیر رو از فرم اصلی واکشی کنم و درون کنترلهای Frame جاسازی کنم.
فعلا با این روش مشکلم حل شده.جالا اینکه فنی هست و یا بعدا به مشکل بر نخورم.دیگه نمیدونم.