Function komutunda, procedure sender işlemi yaptırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Function komutunda, procedure sender işlemi yaptırma

Mesaj gönderen hido »

Merhaba Function işlemi içinde procedure sender 'click' işlemi yaptırmak istiyorum fakat olmuyor acaba function da sender işlemi yaptırılamıyor mu?

Kod: Tümünü seç

Function Degistir(K: String): String;
const
  Turk: String = 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZWQ';
  Eng: String = 'abccdefgghiijklmnooprsstuuvyzwq';
var
  N: integer;
begin
  for N := 1 to length(Turk) do
    while Pos(Turk[N], K) > 0 do
      K[Pos(Turk[N], K)] := Eng[N];
  Result := K;
  Form3.MesajSes(Sender);
end;

Kod: Tümünü seç

procedure TForm3.MesajSes(Sender: TObject);
begin
  PlaySound('C:\WINDOWS\Media\speech On.wav', 0, SND_ASYNC or SND_FILENAME or
    SND_NODEFAULT);
end;
Resim
Kullanıcı avatarı
muratmutlu
Üye
Mesajlar: 57
Kayıt: 02 Tem 2005 02:44
Konum: Antalya

Re: Function komutunda, procedure sender işlemi yaptırma

Mesaj gönderen muratmutlu »

Ne yapmak istediğini tam olarak anlayamadım ama Degistir fonksiyonu içinden MesajSes fonksiyonunu çağırmak istiyorsun galiba. Bu durumda hata vermesi normaldir çünkü; Degistir fonksiyonu içinde herhangi bir Sender tanımlaması yok. Genel bir tanımlamada da olduğu sanmıyorum. Buradaki sorun MesajSes fonksiyonunda değil. Degistir fonksiyonunda görünüyor. MesajSes fonksiyonun parametre olarak geçtiğin Sender ı bir yerler de tanımlaman lazım. Umarım doğru olarak anlatabilmişimdir.
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Function komutunda, procedure sender işlemi yaptırma

Mesaj gönderen xozcanx »

Merhaba;

Kod: Tümünü seç

 Form3.MesajSes(Sender);
yerine

Kod: Tümünü seç

 Form3.MesajSes.Click;
deneyebilirmisiniz.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Function komutunda, procedure sender işlemi yaptırma

Mesaj gönderen G.Arkas »

Neden procedure'ünü sender ile yönlendiriyorsun? Buna gerek yok ki. Procedure'nin Click'i diye bişey olmaz. O procedure'ü tetiklemen için yapman gereken tek şey doğrudan çalıştırmak. Procedure'ünü aşağıda ki şekilde değiştirip kullan.

Kod: Tümünü seç

procedure TForm3.MesajSes;
begin
  PlaySound('C:\WINDOWS\Media\speech On.wav', 0, SND_ASYNC or SND_FILENAME or
    SND_NODEFAULT);
end;
kullanımı

Kod: Tümünü seç

MesajSes;
bu kadar. Her yerde bunu kullanabilirsin.
Resim
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Function komutunda, procedure sender işlemi yaptırma

Mesaj gönderen thelvaci »

Kod: Tümünü seç

program pTavsiye;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TConverter = record
  public
    class function IsEqual(const Value1 : TBytes; const Value2 : TBytes) : Boolean; static;
  end;

var
  YourStatus : TBytes;
  YourMessage: String = '';

{ TConverter }

class function TConverter.IsEqual(const Value1 : TBytes; const Value2 : TBytes) : Boolean;
var
  N           : Integer;

  PLen        : PInteger;
  Size        : Integer;
begin
  N := 0;

  PLen := @Value1[0];
  Dec(PLen);
  Size := PLen^;

  while (N < Size) and (TBytes(Value1)[N] = TBytes(Value2)[N]) do Inc(N);

  Result := N = Size;
end;


var
  cStatus,
  cMessage  : TBytes;

  pCurrent,
  pLast     : PByte;
begin

  try
    cStatus := TBytes.Create($41, $43, $45, $4d, $49);
    cMessage:= TBytes.Create($4f, $4e, $43, $45, $20, $4f, $47, $52, $45, $4e, $20, $53, $4f, $4e, $52, $41, $20, $4b, $4f, $44, $4c, $41);

    YourStatus := TEncoding.ASCII.GetBytes('ACEMI');

    if TConverter.IsEqual(YourStatus, cStatus) then
    begin
      pCurrent := @cMessage[Low(cMessage)];
      pLast    := @cMessage[High(cMessage)];

      while pCurrent <= pLast do
      begin
        YourMessage := YourMessage + Chr(pCurrent^);

        Inc(pCurrent);
      end;

      Writeln(YourMessage);
      Readln;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Cevapla