由于改学delphi,现将学习中的疑问请教大家(都是初级问题) ( 积分: 100 )

  • 主题发起人 主题发起人 strawren
  • 开始时间 开始时间
S

strawren

Unregistered / Unconfirmed
GUEST, unregistred user!
1、delphi是一个纯粹的面向对象,还是像C++那样是个混血儿?
我知道delphi是OOP的,我所谓的纯粹OO,就是在编程的表现形式下,不存在全局函数和自己定义的全局函数,它必须是完全的封装(比如JAVA),一个方法必须属于一个类。

2、关于unit
unit是不是相当于C++中的命名空间、JAVA中的包?只是为了隔离外部空间?

3、关于uses
我们可以通过uses来引入外部单位,但是我们可以在interface和implement中引入,这二者有什么区别?引入外部单位,我想是因为本单元某些地方的需要。interface里,主要是用来声明,好供其他unit调用?

4、package有什么作用?主要是用来干什么的?有什么功能?

5、是否可以直接编辑 .pas 文件(比如添加按纽控件的代码),而让 .dfm 自动添加相应的控件,也就是说我不通过拖一个按纽到form上去,而是直接编辑他的pascal文件(比如别人只给了我一个.pas的源代码,而我又想利用的情况下)。
在我测试中好象不能这样,是不是我的方法不对,还是delphi中没有这种功能?

注:我以前是搞C++和JAVA的,各位XDJM可以从他们的差别来回答~~~~~
 
1、delphi是一个纯粹的面向对象,还是像C++那样是个混血儿?
我知道delphi是OOP的,我所谓的纯粹OO,就是在编程的表现形式下,不存在全局函数和自己定义的全局函数,它必须是完全的封装(比如JAVA),一个方法必须属于一个类。

2、关于unit
unit是不是相当于C++中的命名空间、JAVA中的包?只是为了隔离外部空间?

3、关于uses
我们可以通过uses来引入外部单位,但是我们可以在interface和implement中引入,这二者有什么区别?引入外部单位,我想是因为本单元某些地方的需要。interface里,主要是用来声明,好供其他unit调用?

4、package有什么作用?主要是用来干什么的?有什么功能?

5、是否可以直接编辑 .pas 文件(比如添加按纽控件的代码),而让 .dfm 自动添加相应的控件,也就是说我不通过拖一个按纽到form上去,而是直接编辑他的pascal文件(比如别人只给了我一个.pas的源代码,而我又想利用的情况下)。
在我测试中好象不能这样,是不是我的方法不对,还是delphi中没有这种功能?

注:我以前是搞C++和JAVA的,各位XDJM可以从他们的差别来回答~~~~~
 
1.按你所说delphi就是混血儿
2.unit不是相当于C++中的命名空间、JAVA中的包,但我认为不只是隔离外部空间
3.如果在interface部分要用到其它单元的东东就必须在interface引入,implement类似
interface里,主要是用来声明,好供其他unit调用?主要是供本单元用
4.package里放的是组件、通用的函数、过程拉。。。
5.可以,通过动态创建的方法.
我也刚学DELPHI也是菜鸟,不对请大家斧正
你能提出这些问题来看来就高手啊
 
是否可以直接编辑 .pas 文件(比如添加按纽控件的代码),而让 .dfm 自动添加相应的控件


这个不行的吧
 
是否可以直接编辑 .pas 文件(比如添加按纽控件的代码),而让 .dfm 自动添加相应的控件
这个是要先创建控件,然后添加到窗体上去的,都用代码。
 
是否可以直接编辑 .pas 文件(比如添加按纽控件的代码),而让 .dfm 自动添加相应的控件


这个不行的吧

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
让 .dfm 自动添加相应的控件是做不到的。
 
//我以前是搞C++和JAVA的,各位XDJM可以从他们的差别来回答
C++很牛吗?JAVA很牛吗?就算你C++和JAVA很牛!
就算你是高手,你要学Delphi,也要拿本Delphi的书来看看学学啊!
只需要认真看一本书,看懂了,你就不会问这些乱七八糟的东西了。
你以为只需看两眼.pas的代码就能把Delphi学好了吗?
 
你所谓的自动添加相应控件如果是自动创建的话,那是可以的,牛人们甚至可以直接在.dpr中做文章,而连.pas或.dfm都不要的,例如下面这个别人做的很经典的定时关机的小程序
program AutoShutDown;

uses
ExceptionLog,
Windows,
ShellAPI,
Sysutils,
Messages;

{$R *.RES}
var
WinClass:TWndClassA;
Handle:hwnd;
Inst,Button1, Label1, Edit1: Integer;
Msg: TMsg;
tid: TNotifyIconDataA;
sdt:tdatetime;
timerid:integer;
hFont: Integer;
const
AppName='AutoShutDown';
st='定时关机';
About=st+' 1.0, Keyes.chen@263.net, Keyes 1999.10.23';
gjs='设定关机时间';
procedure SetShutdownTime;
var
Textlength: Integer;
Text: PChar;i:tdatetime;
begin
TextLength := GetWindowTextLength(Edit1);
GetMem(Text, TextLength + 1);
GetWindowText(Edit1, Text, TextLength + 1);
try
i:=Strtodatetime(Text);
if i<=now then
begin
MessageBox(handle,'不对吧!太早了.','错误',mb_ok or MB_ICONERROR);
exit;
end;
sdt:=i;
timerid:=Settimer(handle,1000,1000,nil);
Showwindow(handle,sw_hide);
lstrcpy (tid.szTip,pchar(st+' 关机时间:'+Datetimetostr(sdt)));
Shell_NotifyIcon (nim_modify, @tid);
except
Killtimer(handle,timerid);
Messagebox(handle,pchar('关机时间设定错误'#13#10#13#10+'格式因该是:'+Datetimetostr(now)),AppName,Mb_ok or MB_ICONINFORMATION);
end;
FreeMem(Text, TextLength + 1);
end;
function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer
stdcall;
var pt:tpoint;pm:Hmenu;
begin
result:=0;
Case uMsg of
wm_timer:
begin
if now>=sdt then
begin
Killtimer(handle,timerid);
ExitWindowsEx(EWX_SHUTDOWN or EWX_Force, 0);
// PostMessage(handle,wm_Destroy,0,0);
end;
end;
wm_User:
begin
Case lparam of
WM_LBUTTONDBLCLK:
begin
showwindow(handle,sw_restore);
setforegroundwindow(handle);
end;
wm_LButtonDown,wm_RButtonDown:
begin
GetCursorPos (pt);
pm := CreatePopupMenu;
AppendMenu (pm,0,Ord ('S'),gjs);
AppendMenu (pm, 0, Ord ('A'), '关于...');
AppendMenu (pm, mf_Separator, 0, Nil);
AppendMenu (pm, 0, Ord ('E'), '退出');
SetForegroundWindow (handle);
if TrackPopupMenu (pm, tpm_BottomAlign or tpm_RightAlign, pt.x,{GetDeviceCaps(dc,Vertres)}pt.y, 0, handle, Nil) then
SetForegroundWindow (handle);
DestroyMenu (pm)
end;
end;
end;
wm_Destroy:
begin
Shell_NotifyIcon (nim_Delete, @tid);
Killtimer(handle,timerid);
halt;
end;
wm_Command:
begin
if (lParam = Button1) then begin SetshutdownTime;exit end;
Case Loword(wParam) of
Ord ('A'): MessageBox (0, About, AppName, mb_ok or MB_ICONINFORMATION);
Ord ('E'): PostMessage (handle, wm_Close, 0, 0);
Ord ('S'):
begin
Showwindow(handle,sw_restore);
end;
end;
end;
end;
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;

begin
{ ** Register Custom WndClass ** }
if FindWindow (AppName, Nil) <> 0 then begin
Messagebox(handle,'已经有一个AutoShutDown运行了',AppName,mb_ok or MB_ICONWARNING);
halt(0);
end;
Inst := hInstance;
with WinClass do
begin
style := CS_CLASSDC or CS_PARENTDC;
lpfnWndProc := @WindowProc;
hInstance := Inst;
hbrBackground := color_btnface + 1;
lpszClassname := AppName;
hCursor := LoadCursor(0, IDC_ARROW);
end;
RegisterClass(WinClass);
Handle := CreateWindowEx(WS_EX_WINDOWEDGE, AppName, 'AutoShutDown 1.00',
WS_VISIBLE {or WS_SIZEBOX} or WS_CAPTION or WS_SYSMENU,
283, 238, 325, 65, 0, 0, Inst, nil);
Button1 := CreateWindow('Button', 'OK', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
236, 8, 75, 20, handle, 0, Inst, nil);
Label1 := Createwindow('Static', '', WS_VISIBLE or WS_CHILD or SS_LEFT,
8, 12, 80, 13, Handle, 0, Inst, nil);
Edit1 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', Pchar(Datetimetostr(now)), WS_CHILD or WS_VISIBLE or
WS_BORDER {or ES_PASSWORD}, 88, 8, 141, 21, Handle, 0, Inst, nil);
hFont := CreateFont(-12, 0, 0, 0, 500, 0, 0, 0, GB2312_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, '宋体');
if hFont <> 0 then
begin
SendMessage(Button1, WM_SETFONT, hFont, 0);
SendMessage(Label1, WM_SETFONT, hFont, 0);
SendMessage(Edit1, WM_SETFONT, hFont, 0);
end;
SetWindowText(Label1, pchar(gjs+':'));
SetFocus(Edit1);
UpdateWindow(Handle);
tid.cbSize := sizeof (tid);
tid.Wnd := handle;
tid.uID := 1;
tid.uFlags := nif_Message or nif_Icon or nif_Tip;
tid.uCallBackMessage := wm_User;
tid.hIcon := LoadIcon (hInstance, 'MAINICON');
lstrcpy (tid.szTip,st);
Shell_NotifyIcon (nim_Add, @tid);
while(GetMessage(Msg, Handle, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end.
 
晕.楼上的代码还真是牛人写的.
自已处理消息.
 
后退
顶部