Yorumları: 2.017
Konuları: 246
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.370 Uzman
(23-08-2016, Saat: 14:12)SimaWB Adlı Kullanıcıdan Alıntı: (23-08-2016, Saat: 09:42)vkamadan Adlı Kullanıcıdan Alıntı: Tuğrul abi,
Bu çok faydalı paylaşımın için teşekkür ederim.
SHAutoComplate fonksiyonunun formun OnCreate olayında etki etmemesinin sebebi nedir ?
Formun OnCreate'inde Edit1 için SHAutoComplate'i çalıştırdığımda düzgün çalıştığını gözlemledim. Problemi yanlış mı anladım acaba?
Bende Form OnCreate'de denedim çalıştı.
Yorumları: 1.460
Konuları: 80
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 11.868 Üstad
(23-08-2016, Saat: 13:12)esistem Adlı Kullanıcıdan Alıntı: Selam,
Tuğrul hocam izninizle, ufak bir araştırmayla bulduğum Delphi 7 de ki kullanımına bir örnek vereyim. Malum hala benim gibi eskilerden ilerleyen arkadaşlarda vardır foruma gelen
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, COMOBJ;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Const
shlwapi = 'shlwapi.dll';
SHACF_FILESYSTEM = $1;
function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;
implementation
{$R *.dfm}
function SHAutoComplete(hwndEdit: HWND; dwFlags: dWord): LongInt; stdcall; External shlwapi Name 'SHAutoComplete';
function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;
begin
Result := (SHAutoComplete(editField.Handle, dwFlags) = 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AutoComplete(Edit1, SHACF_FILESYSTEM);
end;
end.
Ellerinize sağlık, ilgili metodu shlwapi.dll içinden static olarak elde etmek yerine dinamik olarak LoadLibrary & GetProcAddress ile temin eder iseniz daha faydalı olacaktır. Static olarak tanımladığınızda ilgili DLL içinde ilgili metod bulunamaz ise uygulamanız başlar iken garip hatalar alabilir ve belki de uygulamanızı başlatamayabilirsiniz. Oysa dinamik olarak ilgili fonksiyonu elde etmeye çalışır iseniz; uygulamanız çalışmış olur ve hatanın yerini yurdunu daha kolay tespit edebilirsiniz
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
Yorumları: 858
Konuları: 35
Kayıt Tarihi: 12-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.731 Uzman
Uyarınız için teşekkürler Tuğrul hocam.
Son tahlilde, foruma bakan arkadaşlar örneği aşağıdaki şekilde kullanırlarsa bahsettiğiniz sorunlar ortadan kalkmış olacaktır.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, COMOBJ, StdCtrls;
type
TAutoComplateFunc = function (hwndEdit: hwnd; dwFlags: DWORD): Boolean; stdcall;
EDLLLoadError = class(Exception);
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
LibHandle : THandle;
Const
SHACF_FILESYSTEM = $1;
function OtomatikTamamla(editField: TEdit; dwFlags: DWORD): Boolean;
implementation
{$R *.dfm}
function OtomatikTamamla(editField: TEdit; dwFlags: DWORD): Boolean;
Var
AutoComplate : TAutoComplateFunc;
begin
LibHandle:=LoadLibrary('shlwapi.dll');
try
If LibHandle=0 Then raise EDLLLoadError.Create('shlwapi.dll yüklenemedi.');
@AutoComplate:=GetProcAddress(LibHandle,'SHAutoComplete');
If @AutoComplate = nil
then raiseLastWin32Error
else result := AutoComplate(editField.Handle, dwFlags);
finally
FreeLibrary(LibHandle);
End;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OtomatikTamamla(Edit1, SHACF_FILESYSTEM);
end;
end.
Yorumları: 170
Konuları: 16
Kayıt Tarihi: 10-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 5.311 Üstad
(23-08-2016, Saat: 11:03)SimaWB Adlı Kullanıcıdan Alıntı: Emeğine sağlık Tuğrul Hocam.
(23-08-2016, Saat: 14:12)SimaWB Adlı Kullanıcıdan Alıntı: (23-08-2016, Saat: 09:42)vkamadan Adlı Kullanıcıdan Alıntı: Tuğrul abi,
Bu çok faydalı paylaşımın için teşekkür ederim.
SHAutoComplate fonksiyonunun formun OnCreate olayında etki etmemesinin sebebi nedir ?
Formun OnCreate'inde Edit1 için SHAutoComplate'i çalıştırdığımda düzgün çalıştığını gözlemledim. Problemi yanlış mı anladım acaba?
Veli bey merhaba,
Delphi 2007 kullanıyorum aynen aşağıdaki gibi kullanımda çalışmıyor,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShlwAPI, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SHAutoComplete(Edit1.Handle, SHACF_FILESYSTEM);
end;
end.
Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
İlginç
Delphi XE ve Delphi 5 ile Windows 7 Pro x86'da denedim çalışıyor.
There's no place like 127.0.0.1
Yorumları: 858
Konuları: 35
Kayıt Tarihi: 12-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.731 Uzman
Selam,
Delphi 7 de Xp de yukarıda verdiğim örneği FormCreate de yazdığım zaman bende de sorunsuz çalıştı, acaba Delphi 2007 den kaynaklı bir sorun olabilirmi? Ayrıca Edit in handle ını FormCreate de kontrol ettiğimde gayet düzgün alıyor. Sizde handle ı bi kontrol edermisiniz volkan hocam.
Yorumları: 2.017
Konuları: 246
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.370 Uzman
Delphi 10 Seattle
Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
Volkan Bey; vaktiniz olduğunda CoInitialize kullanarak deneyebilir misiniz? (Sırf neden çalışmadığını merak ettiğim için. Kıl oldum açıkçası )
Formun OnCreate'inde ilk önce CoInitialize(nil). Tabiki OnDestroy'da CoUninitialize
ShLwApi'de SHAutoComplete ile ilgili şöyle bir uyarı var:
// WARNING:
// Caller needs to have called CoInitialize() or OleInitialize()
There's no place like 127.0.0.1
Yorumları: 170
Konuları: 16
Kayıt Tarihi: 10-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 5.311 Üstad
25-08-2016, Saat: 10:45
(Son Düzenleme: 25-08-2016, Saat: 10:45, Düzenleyen: vkamadan.
Sebep: isim hatası
)
(25-08-2016, Saat: 10:32)SimaWB Adlı Kullanıcıdan Alıntı: Volkan Bey; vaktiniz olduğunda CoInitialize kullanarak deneyebilir misiniz? (Sırf neden çalışmadığını merak ettiğim için. Kıl oldum açıkçası )
Formun OnCreate'inde ilk önce CoInitialize(nil). Tabiki OnDestroy'da CoUninitialize
ShLwApi'de SHAutoComplete ile ilgili şöyle bir uyarı var:
// WARNING:
// Caller needs to have called CoInitialize() or OleInitialize()
Veli bey merhaba ,
Delphi XE2 de denediğimde OnCreate de sorunsuz çalıştı,
Dediğiniz gibi Delphi 2007 de OnCreate ye CoInitialize i ekleyince çalıştı. şimdi şu soruyu soracağız neden OnCreate de CoInitialize çağırmak gerekirken formun üzerinde ki bir buton ile yaptığımızda CoInitialize eklemeye gerek olmadan da işliyor
Yorumları: 8
Konuları: 2
Kayıt Tarihi: 27-10-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 33 Başlangıç
takip güzel ve kullanışlı.
|