Run time de Image eklemek ve çoğaltmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Run time de Image eklemek ve çoğaltmak
Slm
arkadaşlar Forumda run time diye aradım ama 28 başlık üzerinde bulamadım run time durumunda bir butona basarak ımage nesnesi nasıl eklenir.Her tıklamada tekrar üretecek şekilde.
arkadaşlar Forumda run time diye aradım ama 28 başlık üzerinde bulamadım run time durumunda bir butona basarak ımage nesnesi nasıl eklenir.Her tıklamada tekrar üretecek şekilde.
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
1. kural: Bir bileşen sınıfınının Create metodu ile oluşturulur.
2. kural: Görsel bileşenlerini nerede göstermek gerekiyorsa Parent özelliği ile ayarlamak gerekecektir.
O halde: Her şey bu kadar. Bileşenler form yok olduğunda kendiliğinden yok olacaktır. Kolay gelsin.
2. kural: Görsel bileşenlerini nerede göstermek gerekiyorsa Parent özelliği ile ayarlamak gerekecektir.
O halde:
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender:TObject);
begin
with TImage.Create(Self) do begin //<-1. madde
Parent:=Form1;//2. madde, panel groupbox değerleri de alabilir.
end;
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Her tıklamada birbirinden bağımsız TImage'ler üretmek istersen şöyle bir örnek de ben hazırladım.
Kod: Tümünü seç
Var
xResimGrubu : Array of TImage; // Uses ExtCtrls
xResimIdx : Integer = -1;
xSoldan : Integer = 0;
xTepeden : Integer = 0;
xImgSat : Integer = 5; // satırda kaç resim olacak
procedure TForm1.Button1Click(Sender: TObject);
begin
Inc(xResimIdx); // Resim Indexi 1 arttırdık. 0'dan başlıyoruz.
SetLength( xResimGrubu, xResimIdx+1); // dinamik uzunluk 0 olamaz
xResimGrubu[xResimIdx] := TImage.Create(Self); // Create işlemi
With TImage(xResimGrubu[xResimIdx]) do begin
Parent := Self;
Width := 10;
Height := 10;
If (xResimIdx) MOD xImgSat = 0 then begin
xSoldan := 0;
Inc(xTepeden, Height);
end;
Inc(xSoldan, Width);
Left := xSoldan;
Top := xTepeden;
//Varsayılan Resmi Yükleyebilirsin.
Picture.LoadFromFile('C:\adsız.bmp');
end;
// Artık herhangi bir yerden xResimGrubu[0] dediğinde 1 nolu image elinde demektir.
// xResimGrubu[3] dediğinde 4 nolu image elinde demektir.
end;
ilgilerinize teşekkür ediyorum
hocam her iki kodu da ayrı ayrı denedim fakat forma Tımage nesnesi eklemiyor atladığım bir yer mi var
bilmiyorum
Birde oluşturduğum nesneleri form üzerinde ileri geri taşımak istiyorum şöyle bir kod var butonları taşımak için ama Tımageye uyarlamama rağmen çaıştıramadım butonda gayat güzel çalışıyor.
hocam her iki kodu da ayrı ayrı denedim fakat forma Tımage nesnesi eklemiyor atladığım bir yer mi var


Birde oluşturduğum nesneleri form üzerinde ileri geri taşımak istiyorum şöyle bir kod var butonları taşımak için ama Tımageye uyarlamama rağmen çaıştıramadım butonda gayat güzel çalışıyor.
Kod: Tümünü seç
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
TButton(Sender).perform(WM_SYSCOMMAND, $F012, 0);
end;
diğer soru ??? "TImage nesnesi neden oluşmuyor ?" olamaz değil mi !?
TImage nesnesi öyle rengi ve kokusu olan bir nesne değildir. İçine bir resim koymazsan göremezsin, bunu hatırlatmak isterim.
Kendi örneğimde bir resmi otomatik olarak yüklyen bir satır koymuştum onu kaldırmadıysan sonucu görmen lazımdı. Aksi halde olmuyor sözünü destekleyen bir hata mesajı beklerdim.
TImage nesnesi öyle rengi ve kokusu olan bir nesne değildir. İçine bir resim koymazsan göremezsin, bunu hatırlatmak isterim.
Kendi örneğimde bir resmi otomatik olarak yüklyen bir satır koymuştum onu kaldırmadıysan sonucu görmen lazımdı. Aksi halde olmuyor sözünü destekleyen bir hata mesajı beklerdim.
mrmarman hocam özür dilerim
Width := 10;
Height := 10;
özelliğinden dolayı ToolButton nu altında kalıyormuş oluşan ımageler ToolButton ı kadırınca gördüm.Çok özür
mrmarman hocam bu oluşturduğumuz Tımage yi paneller içinde nasıl gösterebiliriz yani panel yaratılıp içine
Picture.LoadFromFile('C:\adsız.bmp');
Battosai önerisi üzerinden oluşan ımageleri taşımak istiyorum form içinde.Tabi burada her yaratılan Tımagelerde bu kodun
çalışmasını istiyorum yardımcı olabilirmisiniz çok şey istediğiminde farkınadayım 
Width := 10;
Height := 10;
özelliğinden dolayı ToolButton nu altında kalıyormuş oluşan ımageler ToolButton ı kadırınca gördüm.Çok özür
mrmarman hocam bu oluşturduğumuz Tımage yi paneller içinde nasıl gösterebiliriz yani panel yaratılıp içine
Picture.LoadFromFile('C:\adsız.bmp');
Battosai önerisi üzerinden oluşan ımageleri taşımak istiyorum form içinde.Tabi burada her yaratılan Tımagelerde bu kodun
Kod: Tümünü seç
ReleaseCapture;
TPanel(Sender).perform(WM_SYSCOMMAND, $F012, 0);

- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Eğer kodu TImage'ın olayına yazıyorsan koduhaydarxxx yazdı:Kod: Tümünü seç
ReleaseCapture; TPanel(Sender).perform(WM_SYSCOMMAND, $F012, 0);
Kod: Tümünü seç
ReleaseCapture;
TImage(Sender).Parent.perform(WM_SYSCOMMAND, $F012, 0);
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
ilk aşama olarak onMouseDown olayı ile aynı parametrik yapıya sahip bir prosedür yaz.Oluşturduğun bu image bileşenlerine bu olayı ata.gibi. Burada kilit nokta olay atamayı gerçekleştirmek.
Kod: Tümünü seç
private
{ Private declarations }
procedure Img_MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
.
.
.
.
.
procedure TForm1.Img_MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TControl then begin
ReleaseCapture;
TControl(Sender).Parent.perform(WM_SYSCOMMAND, $F012, 0);
end;
end;
Kod: Tümünü seç
with TImage.Create(Self) do begin
Parent:=Panelx;
OnMouseDown:=Img_MouseDown;
Left:=x;
Top:=y;
.
.
.
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Sıfır bir proje aç ve forma bir adet buton yerleştir. O butonun OnClick olayına da şekildeki gibi kodu yaz. Kodlar arasındaki farkı gözeterek hatayı nerede yaptığını bul.
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Jpeg;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure KendiminMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.KendiminMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
{bunu formda private bloğunda sen tanımla (Ctrl+Shift+C tuşları otomatik tanımlar)}
begin
ReleaseCapture;
TImage(Sender).Parent.Perform(WM_SYSCOMMAND, $F012, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var Panel:TPanel;
begin
Randomize;
Panel:=TPanel.Create(Self);
with Panel do begin
Parent:=Self;
Left:=Random(Self.Width div 2);//100
Top:=Random(Self.Height div 2);//100
end;
with TImage.Create(Self) do begin
Parent:=Panel;
Align:=alClient;
OnMouseDown:=KendiminMouseDown;
Picture.LoadFromFile('c:\a.jpg');
end;
end;
end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Formun KeyPreview özelliğine True verilmeli ve SeciliPanel:TPanel; diye bir değişken tanımlanmalı.KendiminMouseDown olayında seçilen paneli bir değişkene atayıp daha sonra formun onKeyDown olayında da silme işlemi bu değişken üzerinden yapılmaktadır. Kolay gele.
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Jpeg;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
SeciliPanel:TPanel;
procedure KendiminMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.KendiminMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
{bunu formda private bloğunda sen tanımla (Ctrl+Shift+C tuşları otomatik tanımlar)}
begin
if Assigned(SeciliPanel) then SeciliPanel.Color:=clBtnFace;//eski panel normale döner
ReleaseCapture;
SeciliPanel:=TPanel(TImage(Sender).Parent);
SeciliPanel.Color:=clBlue;//seçilen panel mavi olur
SeciliPanel.Perform(WM_SYSCOMMAND, $F012, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var Panel:TPanel;
begin
Randomize;
Panel:=TPanel.Create(Self);
with Panel do begin
Parent:=Self;
Left:=Random(Self.Width div 2);//100
Top:=Random(Self.Height div 2);//100
end;
with TImage.Create(Self) do begin
Parent:=Panel;
Align:=alClient;
OnMouseDown:=KendiminMouseDown;
Picture.LoadFromFile('c:\a.jpg');
end;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_DELETE:if Assigned(SeciliPanel) then begin
FreeAndNil(SeciliPanel.Controls[0]); //TImage silinir
FreeAndNil(SeciliPanel);//TPanel silinir
end;
end;
end;
end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Hocam cevap için teşekkür ediyorum
satırında bu ahatayı alıyorum
Kod: Tümünü seç
FreeAndNil(SeciliPanel.Controls[0]); //TImage silinir
Kod: Tümünü seç
Build
[Error] Unit1.pas(92): Constant object cannot be passed as var parameter
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'