Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ÇÖZÜLDÜ formu dialog alarak kullanmak mümkünmü?
#1
arkadaşlar inputbox yerine bir formu kullanabilirmiyiz. bu mümkünmü yapılabilirmi?

lazarus kullanıyorum TaskDialog1 diye bir kompenant var ama işimi görmüyor

1  2   3   4   5

6  7  8  9   resim

formatında 9 adet buton 1 adet resim eklemem lazım. çağırdıgım yere tıklanan btondaki degeri bana gönderecek resme tıklanınca 10
gönderecek.
böyle bir inputbox yapma imkanı olabilir mi.

saygılarımla.
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#2
(11-03-2020, Saat: 11:00)sadikacar60 Adlı Kullanıcıdan Alıntı: arkadaşlar inputbox yerine bir formu kullanabilirmiyiz. bu mümkünmü yapılabilirmi?

lazarus kullanıyorum TaskDialog1 diye bir kompenant var ama işimi görmüyor

1  2   3   4   5

6  7  8  9   resim

formatında 9 adet buton 1 adet resim eklemem lazım. çağırdıgım yere tıklanan btondaki degeri bana gönderecek resme tıklanınca 10
gönderecek.
böyle bir inputbox yapma imkanı olabilir mi.

saygılarımla.

Yazdıklarınızdan anlayabildiğim kadarı ile 
aslında ekranda 10 buton var 
her butonunda 1 değeri var 
butonun değerleri tag alanında olduğunu varsayıyoruz.

burumda her butonun altındaki click olayını 
ortak bir procedure yönlendirir ve parametresinede tobject olarak alırsanız
(sender as TButton).tag ile değere ulaşabilirsiniz.
Sonrada bu değeri ister input ister başka yerde kullanabilirsiniz.

Umarım yazdıklarınızı doğru anlayabilmişimdir.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#3
hocam kusuruma kalmayın küçük bir örnek verebilirmisiniz.
projemde 100 adet edit var her edite dbclick yaptıgımda 9 adet butonun oldugu form açılacak hangi butona tıklarsam onun değeri edite
yazılacak. aslında panel üzerine hazırlayabilirim veya frame hazırlayıp forma ekleyebilirim ama pratik olması çağırdığım yerde inputbox da
olduğu gibi tıklanan değeri alabilirmiyi diye araştımaya çalışıyorum TaskDiyalog diye bir kompenant var tam istediim gibi ama içerisinde istediğimgibi bir düzenleme yapamıyorum.
saygılarımla

ayrıca;
puanA := InputBox('PUAN : ', '', '');

burda kullanılan input menüsünü özelleştirme imkanı yok mu acaba?
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#4
(11-03-2020, Saat: 13:56)sadikacar60 Adlı Kullanıcıdan Alıntı: hocam kusuruma kalmayın küçük bir örnek verebilirmisiniz.
projemde 100 adet edit var her edite dbclick yaptıgımda 9 adet butonun oldugu form açılacak hangi butona tıklarsam onun değeri edite
yazılacak.  aslında panel üzerine hazırlayabilirim veya frame hazırlayıp forma ekleyebilirim ama pratik olması çağırdığım yerde inputbox da
olduğu gibi tıklanan değeri alabilirmiyi diye araştımaya çalışıyorum TaskDiyalog diye bir kompenant var tam istediim gibi ama içerisinde istediğimgibi bir düzenleme yapamıyorum.  
saygılarımla

ayrıca;
puanA := InputBox('PUAN : ', '', '');

burda kullanılan input menüsünü özelleştirme imkanı yok mu acaba?

Merhaba,
bir form oluşturun.
Formunuzu istediğiniz gibi dizayn edin.
Sonrasında çağırım esnasında ShowModal(); olarak çağırın.
Örneğin;
 
xForm1.ShowModal();


Sonrasında bir butona tıklayıp @adelphiforumz hocamızın vermiş olduğu kodu yapıştırın veya hepsini tek tek kontrol etmek istiyorsanız her butonun onClick eventine
 
ShowMessage(ButtonX.Tag);
yazabilirsiniz veya ilk başta tek butona yazdığınız kodu diğer butonların eventleri ile eşitleyin. 
Bir alternatif ise Tag yerine direkt name değerini kullanabilirsiniz. 
Örnek buton isimleri: bir, iki, uc. Gelen değere göre işlem yaparsınız.

İyi çalışmalar.
kisisel_logo_dark.png
WWW
Cevapla
#5
Formu bir fonksiyon gibi tasarlayın.
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
WWW
Cevapla
#6
(11-03-2020, Saat: 14:17)uparlayan Adlı Kullanıcıdan Alıntı: Formu bir fonksiyon gibi tasarlayın.
//form2 de butona tıklanınca tag değerini atadım
procedure TForm2.Button1Click(Sender: TObject);
begin
 Form2.Tag:=1;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 Form2.Tag:=2;
end;


ana formda tag degerini formu kapatınca aldım 
bir ilerleme kaydettim. biraz daha istediğim gibi geliştirmeye çalışacağım.

bu arada bir formu fonksiyon içinden çağırıp formdan alınan değeri geri döndürmeyi deneyeceğim bakalım becerebilecekmiyiz

saygılarımla.
procedure TForm1.Edit1DblClick(Sender: TObject);
var
tiklanan:integer;
begin
Form2.ShowModal();
tiklanan:=Form2.Tag;
Edit1.Text:=IntToStr(tiklanan);
end; 



aşagıdaki kod ile fonksiyon kullanarak değer aldım bu şekilde benim işimi görür 
function degerAl():integer;
var
tiklanan:integer;
begin
Form2.ShowModal();
tiklanan:=Form2.Tag;

Result:=tiklanan;
end;

procedure TForm1.Edit1DblClick(Sender: TObject);
begin
Edit1.Text:=IntToStr(degerAl);
end;    

procedure TForm2.Button1Click(Sender: TObject);
begin
 Form2.Tag:=1;
 Form2.Close;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 Form2.Tag:=2;
 Form2.Close;
end; 


sadece bir şeyi merak ediyorum formu ShowModal() olarak açtığımız için kodun devam etmesi için form kapanması şart
peki form kapanmadan karar değiştirerek değer vermek istesek nasıl yaparız yani

şu anda 2 ye tıkladın form kapanıyor değer edit içine alınıyor peki form açılınca form kapanmadan tıkladığımız datanın anında 
editin  içine eklenmesini nasıl sağlarız?
 ana forma hangi editin seçili olduğu bilğisini form2 ye gönderip form2 de tıklanma gerçekleştii anda
edit içine değer gödermesini sağlayabilirmiyiz? böylemi olmalı?

saygılarımla

arkadaşlar sorunu çözdüm forma problemi yazınca birazda destek alınca baya faydalı oluyor tüm arkadaşlara çok teşekkür ederim.
saygılar sunarım.


procedure TForm1.Edit2DblClick(Sender: TObject);
begin
Form2.Hedit:='Edit2';
Form2.ShowModal();
end;

public
Hedit: string;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
TEdit(Form1.FindComponent(Hedit)).Text:='1';
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
TEdit(Form1.FindComponent(Hedit)).Text:='2';
end;
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#7
Daha basit çözülebilir...

Fonksiyonu kullanacağınız ana formu temsilen bir buton koyun. Implementasyonuna fiyalog formunuzun unitini ekleyin. Butonun klik olayından fonksiyonu çağırın.

unit Ana_;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   BT_Test: TButton;
   procedure BT_TestClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

uses
 Diyalogum_;

procedure TForm1.BT_TestClick(Sender: TObject);
begin
 ShowMessage( 'Tıklanan : ' + IntToStr(GetDiyalog(Self)) );
end;

end.

Diyalog formunuza 9 buton ve bir image nesnesi ekleyin. Her bir buton ve image nesnesinin onClick olayında aynı eventi çağırın. O eventte SENDER'den gelen TAG değerini SONUC değişkenine aktarın. Formu kapatın.

unit Diyalogum_;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

type
 TDiyalogum = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   Button5: TButton;
   Button6: TButton;
   Button7: TButton;
   Button8: TButton;
   Button9: TButton;
   Image1: TImage;
   procedure KlikManager(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   Sonuc : Integer;
 end;

 function GetDiyalog(aOwner: TComponent): Integer;

 //var Diyalogum: TDiyalogum;

implementation

{$R *.dfm}

function GetDiyalog(aOwner: TComponent): Integer;
begin
 with TDiyalogum.Create(aOwner) do       // Özel diyalog formunu oluşturduk.
 try
   ShowModal;                            // Formu gösterdik.
   Result := Sonuc;                      // Formdaki SONUÇ değişkenini fonksiyonun çıktısı olarak belirledik.
 finally
   Free;                                 // Oluşturduğumuz formu yok ettik...
 end;
end;

{ TDiyalogum }

procedure TDiyalogum.FormCreate(Sender: TObject);
begin
 Sonuc := 0;                             // Varsayılan, başlangıç, atanmamış değer anlamında...
end;

procedure TDiyalogum.KlikManager(Sender: TObject);
begin
 if Sender is TButton then Sonuc := TButton(Sender).Tag else
 if Sender is TImage  then Sonuc := TImage (Sender).Tag;
 Close;
end;

end.

Bu ana formunuzun DFM dosyası;

object Form1: TForm1
 Left = 0
 Top = 0
 Caption = 'Form2'
 ClientHeight = 299
 ClientWidth = 635
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object BT_Test: TButton
   Left = 38
   Top = 28
   Width = 75
   Height = 25
   Caption = 'TEST'
   TabOrder = 0
   OnClick = BT_TestClick
 end
end

Bu da özel diyaloğunuzun DFM dosyası...

object Diyalogum: TDiyalogum
 Left = 0
 Top = 0
 BorderStyle = bsDialog
 Caption = 'Diyalogum'
 ClientHeight = 135
 ClientWidth = 429
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 DesignSize = (
   429
   135)
 PixelsPerInch = 96
 TextHeight = 13
 object Image1: TImage
   Tag = 10
   Left = 265
   Top = 22
   Width = 142
   Height = 87
   Anchors = [akLeft, akTop, akRight]
   OnClick = KlikManager
   ExplicitWidth = 206
 end
 object Button1: TButton
   Tag = 1
   Left = 22
   Top = 22
   Width = 75
   Height = 25
   Caption = '1'
   TabOrder = 0
   OnClick = KlikManager
 end
 object Button2: TButton
   Tag = 2
   Left = 103
   Top = 22
   Width = 75
   Height = 25
   Caption = '2'
   TabOrder = 1
   OnClick = KlikManager
 end
 object Button3: TButton
   Tag = 3
   Left = 184
   Top = 22
   Width = 75
   Height = 25
   Caption = '3'
   TabOrder = 2
   OnClick = KlikManager
 end
 object Button4: TButton
   Tag = 4
   Left = 22
   Top = 53
   Width = 75
   Height = 25
   Caption = '4'
   TabOrder = 3
   OnClick = KlikManager
 end
 object Button5: TButton
   Tag = 5
   Left = 103
   Top = 53
   Width = 75
   Height = 25
   Caption = '5'
   TabOrder = 4
   OnClick = KlikManager
 end
 object Button6: TButton
   Tag = 6
   Left = 184
   Top = 53
   Width = 75
   Height = 25
   Caption = '6'
   TabOrder = 5
   OnClick = KlikManager
 end
 object Button7: TButton
   Tag = 7
   Left = 22
   Top = 84
   Width = 75
   Height = 25
   Caption = '7'
   TabOrder = 6
   OnClick = KlikManager
 end
 object Button8: TButton
   Tag = 8
   Left = 103
   Top = 84
   Width = 75
   Height = 25
   Caption = '8'
   TabOrder = 7
   OnClick = KlikManager
 end
 object Button9: TButton
   Tag = 9
   Left = 184
   Top = 84
   Width = 75
   Height = 25
   Caption = '9'
   TabOrder = 8
   OnClick = KlikManager
 end
end
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
WWW
Cevapla
#8
Lazarus kullandığınızı belirtmişsiniz. Ben lazarus kullanmadım ve aşağıda vereceğim kodun Lazarus'ta çalışacağına emin değilim. Muhtemelen benzer yapılar orada da vardır fakat bu konuyu okuyan diğer ziyaretçilerin sorduğunuz sorunun devamındaki durumu nasıl yönetecekleri ile ilgili bilgi edinmelerini önemsiyorum;

ShowModal kullanımının ana uygulamayı bloke ettiğinden bahsettiniz, bunun için aşağıdaki gibi bir kod örneği sorununuzu çözecektir;

procedure TAna.BT_Test_2Click(Sender: TObject);
begin
  TTask.Run(procedure                   // Paralel bir görev başlattık.
            var
              I: Integer;               // Paralel görev içinde bir değişkenimiz var...
            begin
              I := GetDiyalog(nil);     // Özel diyalog formumuzu görevin içinde çalıştırıyoruz.
                                        // Bu sayede asıl uygulama bu diyalog formu tarafından bloke edilmemiş oluyor.
                                        // Bu noktada önemli olan detay, uzun süren, bekleten, ağır işlerinizi
                                        // TTASK içinde ama QUEUE ve SYNCRONIZE dışında kodlamalısınız.

              TThread.Queue ( nil       // Bu noktada ise ana kanalın (NİL ile ifade edilir) kuyruğuna
                            , procedure // Bu görevdeki sonuçları
                              begin     // aktarıyoruz.
                                ShowMessage( 'Tıklanan : ' + IntToStr(I) ); // Bu noktada kodun geri kalanı, ana kanalın bir parçası gibi davranır.
                              end       // O nedenle ağır kodları bu kısma değil, "TThread.Queue"den önceki bölgeye yazın...
                            );
            end);
end;
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL Table Type parametre gecisi hakkında (Çözüldü) adelphiforumz 1 161 09-04-2026, Saat: 15:53
Son Yorum: adelphiforumz
  DBGrid1 Alanlarını Gizle Göster Olarak Kullanmak. OZCANK 4 1.076 05-04-2025, Saat: 22:02
Son Yorum: metemet
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 754 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68
  MdiChield formu aynı projede show ve showmodal ile çağırma nevzatc 6 1.017 07-12-2024, Saat: 19:08
Son Yorum: nevzatc
  video player olan formu kapatma tekrar acma sorunu sadikacar60 3 775 26-11-2024, Saat: 16:39
Son Yorum: esistem



Konuyu Okuyanlar: 1 Ziyaretçi