DLL icinden form nesnelerine erismek.

Başlatan bunalmis, 11 Haziran 2010, 13:12:31

z

Calistirdigimizda Form uzerindeki memo1 icine Hello satiri ekleyen basit bir program dusunun.

Memoya Hello yazan proceduru DLL icine nasil gomerim?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

delphi bilmem ama mantığı şudur
1. dll içerisine dll deki altprogram yada fonksiyon çağrıldığında "hello world" yazdırak bir program yazarım
2. bu dll i projeme refere ederim.
3. bir değişken yardımı ile bu "yazılan metni" alırım
4. değişkenin içeriğini istediğim yere atarım.

t2

#2
DLL kendi başına bir şey yapmaz. içinde yazı yazacak bir fonksiyon varsa onu işletecek formdaki nesne üzerine yazdırtacak olan şey yine formun kendisi veya ürettiği bir nesnedir.  diyelim dLLde şöyle bir fonksiyon olsun

function yaz(metin:string; yer:Tstrings):boolean;
begin
  yer.Add(metin);
end;

form bunu işleteceği zaman şöyle der
yaz('cici metin', memo1.Lines)

burada memo1.Lines denen şey fonksiyonun yazabileceği stringlerdir. Tstrings sınıfından başka bir şey de olabilir. Memosu olmayan sadece stringleri içeren  bir değişken olabilir.

var liste:Tstrings;
...
begin
liste:= TStrings.Create;

z

#3
Derleyici, DLL icinde form1.memo1.text:='Hello'; seklinde satir gorurse form1 ve memo1 ifadelerine kiziyor.

DLL icine
 
function DllFunction():String;
begin
      Result:='Hello';
end:


Form uzerinde de

memo1.text:=DllFunction();

yapmak istemiyorum.

Istedigim

DllFunction(); dedigimde form uzerindeki memo1 de Hello gormek.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

controller

Değişik yöntemlerle yapılabilir. Mesela memo1 nesnesini dll fonksiyonuna parametre olarak geçirip yapabilirsiniz.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

z

DLL deki fonksiyona memo1 i nasil tanitacagimi beceremedim zaten.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

hocam fonksiyon() şeklinde kullanmak istiyorsanız olmaz. ama fonksiyon(memo1) şeklinde kullanacaksanız olur

orhanc

#7
fonksiyondan geleni liste veya string olarak memo içine atabilirsin ya da prosedür kullanıp çıkış paramteresini memo olarak belirleyip yine göndermek istediğin memo adını yazman yeterli olacakttır.

Formda bir tane düğme bir tane memo var.

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    procedure myProc(out Dene: TMemo);
    function myFunc: String;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  myProc(Memo1);
  Memo1.Lines.Add(myFunc);
end;

procedure TForm2.myProc(out Dene: TMemo);
begin
   Dene.Lines.Add('prosedür');
end;

function TForm2.myFunc:String;
begin
   result := 'fonksiyon';
end;

end.
i'm doing nothing... Giddy Up  http://www.drorhan.com