Ekrana Yazı Yazma ..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Ekrana Yazı Yazma ..

Mesaj gönderen s1lv3r »

Ekranın belli koordinatlarına istediğim renkte ve boyutta yazı yazmak istiyorum daha sonra istediğim zaman o yazıyı temizlemek istiyorum nasıl bir kod kullanabilirim ?
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Ekrandan kasıt nedir, vganın flashroomuna yazmak gibi bişey mi?
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Butona bastığımda ekranda ne olursa olsun en üstte benim istediğim yazı istediğim koordinatlarda gözükecek :roll:
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Kod: Tümünü seç

procedure TForm1.Yaz(x, y: integer; yazi: string);
var
   Handle: HWND;
   Dc: HDC;
   ACanvas: TCanvas;
begin
   Handle := GetDesktopWindow;
   Dc := GetWindowDC(Handle) ;
   ACanvas := TCanvas.Create;
   try
     ACanvas.Handle := DC;
     BeginPath(ACanvas.Handle) ;
     ACanvas.Font.Color := clRed;
     ACanvas.Font.Name := 'Tahoma';
     ACanvas.Font.Size := 30;
     SetBkMode(ACanvas.Handle, TRANSPARENT) ;
     EndPath(ACanvas.Handle) ;
     ACanvas.TextOut(x,y,yazi) ;
   finally
     ReleaseDC(Handle, ACanvas.Handle) ;
     ACanvas.Free;
   end;
end;
Bu şekilde yazılıyor fakat nasıl silinir bilmiyorum.
Not:Kodlar delphiturkiye.com'dan :ara =Hız
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Kodlar işe yaradı editteki yazıları aynen yazdırabiliyorum fakat memodakileri yazarken satırları birleştirip yazıyor yani satır altamıyor nasıl çözebilirim
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhaba,

Yazı yazacağın bir form oluştur, ve formu transparent yap. üstüne ne istiyorsan yaz sonra formu close yaptığında yazında gitmiş olacaktır.

Direk olarak Desktop'a yazılabiliyor ancak F5 ile desktpu tazelersen yazı gider. bu nedenle yazılacak alanı en basitinden bir form yada bir panel olarak ayarlamak en kolay yöntem olacaktır.

Saygılar..
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

Kod: Tümünü seç

...
ACanvas.TextOut(x,y+satirsay*30,Memo1.Lines[satirsay]) ;
...

gibi bir şey yapmalı. Memo1.Text ile hepsini bir satıra yazar sanırım. Ayrıca 255 karekterden fazlası yazılmaz.

@muratdicle haklı desktop a çizmenin sakıncaları var. Başka bir sakıncada aktif formun çizilen şeyi örtmesi.

Direk bir forma çizmeli. Yalnız bazı Transparan yapma yolarında (AlphaBlend ile oynamak gibi) çizilen şeyde görünmez.

Önerim;

Kod: Tümünü seç

Form.Color:=//bir renk örneğin clMaroon
Form.TransparentColorValue:= //üstteki renk örnekte clMaroon
Form.TransparentColor:=True;
yapmak olabilir tabi burda clMaroon rengi çizimde kullanılamaz. Kullanılır ama görünmez
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

poshet303 yazdı:

Kod: Tümünü seç

...
ACanvas.TextOut(x,y+satirsay*30,Memo1.Lines[satirsay]) ;
...

gibi bir şey yapmalı. Memo1.Text ile hepsini bir satıra yazar sanırım. Ayrıca 255 karekterden fazlası yazılmaz.
Aslında benim istediğim de buydu yani üzerinden birşey geçince silinsin. Herşey güzel fakat çoklu satır ekleyemiyorum :(

Yani memode ne kadar alt satıra geçersem geçeyim ekranda boş kutu gözüküyor alt satıra inmiyor :cry:
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  For i:=0 to Memo1.Lines.Count-1 Do
   Yaz(10,i*30,Memo1.Lines.Strings[i]);
end;
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Yani memode ne kadar alt satıra geçersem geçeyim ekranda boş kutu gözüküyor alt satıra inmiyor
ACanvas.TextOut yerine DrawText API fonksiyonunu deneyin. Belirttiğiniz dikdörtgene göre boyutlandırıp yazdırabilirsiniz.

Örnek:

Kod: Tümünü seç

 Str := 'MERHABA'#13#10'ALŞSDJKAKLSD';
DrawText(DC,Pchar(str),length(Str),Rect(0,0,100,100),DT_WORDBREAK);
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

ulu coder yazdı:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  For i:=0 to Memo1.Lines.Count-1 Do
   Yaz(10,i*30,Memo1.Lines.Strings[i]);
end;
Kod işe yarıyor fakat burdaki y değişkeni memo arasındaki satır boşluğunu belirliyor. Peki Y koordinatını nereye yazmam gerekiyor :roll:
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

i*30 'a ekleme yap.
20+i*30 gibi...
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Oldu teşekkür ederim. :)
Cevapla