Main Menü'ye tasarım eklemek istiyorum
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Main Menü'ye tasarım eklemek istiyorum
Merhaba, main menünün rengini filan nasıl değiştirebilirim ?
Re: Main Menü'ye tasarım eklemek istiyorum
(1) MainMenu'nun OwnerDraw özelliğini TRUE yaparak başlayabilirsiniz.
(2) Geriye her menu item'in OnMeasureItem ve OnDrawItem eventlerine kod ile yapılacak boyama, yazı fontu manipülasyonu vb. kalıyor.
(-) Menu item'lerden ilkine renklendirmeye ilişkin kodu yazacak, diğer menuItem'lerin bu procedure'e yönlendirilmesini sağlayacaksınız ki her biri aynı şekilde mimik versin.
- Yapamazsanız da uygun bir zamanda örnek hazırlarım.
(2) Geriye her menu item'in OnMeasureItem ve OnDrawItem eventlerine kod ile yapılacak boyama, yazı fontu manipülasyonu vb. kalıyor.
(-) Menu item'lerden ilkine renklendirmeye ilişkin kodu yazacak, diğer menuItem'lerin bu procedure'e yönlendirilmesini sağlayacaksınız ki her biri aynı şekilde mimik versin.
- Yapamazsanız da uygun bir zamanda örnek hazırlarım.
Re: Main Menü'ye tasarım eklemek istiyorum
Renk kodu için bi örnek yazabilir misiniz ?mrmarman yazdı:(1) MainMenu'nun OwnerDraw özelliğini TRUE yaparak başlayabilirsiniz.
(2) Geriye her menu item'in OnMeasureItem ve OnDrawItem eventlerine kod ile yapılacak boyama, yazı fontu manipülasyonu vb. kalıyor.
(-) Menu item'lerden ilkine renklendirmeye ilişkin kodu yazacak, diğer menuItem'lerin bu procedure'e yönlendirilmesini sağlayacaksınız ki her biri aynı şekilde mimik versin.
- Yapamazsanız da uygun bir zamanda örnek hazırlarım.
Re: Main Menü'ye tasarım eklemek istiyorum
Önce:
Sonra:
Hazırladığım örneğin kaynak kodlu proje paketini bu linkten indirebilirsin.
Başarılar.
Sonra:
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
Sayac : Integer;
begin
MainMenu1.OwnerDraw := True;
For Sayac := 0 to ComponentCount-1 do begin
If Components[Sayac] is TMenuItem then
begin
With TMenuItem(Components[Sayac]) do begin
If Caption <> '-' then
begin
OnDrawItem := MenuItemDrawItem;
end;
end;
end;
end;
end;
procedure TForm1.MenuItemDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
var
strMenuBasligi : string;
MenuRect : TRect;
begin
strMenuBasligi := TMenuItem(sender).Caption;
//(1)// Arka Fonu Temizleyelim...
ACanvas.Brush.Style := bsSolid;
ACanvas.Brush.Color := clBtnFace;
ACanvas.FillRect(ARect);
//(2)// Seçili Olan Item'in Reklerini Ayarlayalım...
if Selected then
begin
//(a)// Seçili Item'in içini ele alalım...
ACanvas.Brush.Style := bsSolid; // Dolgu modunda olsun, içini boyasın...
ACanvas.Brush.Color := clYellow; // İç boyası Sarı olsun...
ACanvas.FillRect(ARect); // Item'in içini boyayla doldurduk. Yazı falan yok.
//(b)// Seçili Item'in içi farklı, çerçevesi farklı olsun istedik diyelim...
ACanvas.Brush.Style := bsClear; // Transparan modunda olsun, içini boş bıraksın...
ACanvas.Pen.Color := clRed; // Çerçeve rengi Kırmızı olsun...
ACanvas.Pen.Width := 3; // Çerçeve biraz kalın olsun...
ACanvas.Pen.Style := psInsideFrame; // Çerçeve Item sınırlarıda olsun...
ACanvas.Rectangle( ARect.Left, ARect.Top, ARect.Right, ARect.Bottom );
end;
//(c)// Item yazılarını yazalım...
ACanvas.Brush.Style := bsClear; // Transparan modunda olsun, içini boş bıraksın...
ACanvas.Font.Style := [fsBold];
ACanvas.Font.Color := clBlack;
MenuRect.Left := ARect.Left + 25; // Menü içerisinde yazının konumunu belirliyoruz...
MenuRect.Right := ARect.Right - 5;
MenuRect.Top := ARect.Top + 2;
MenuRect.Bottom := ARect.Bottom - 2;
DrawText(ACanvas.Handle, PChar(strMenuBasligi), length(strMenuBasligi), MenuRect, DT_LEFT or DT_EXTERNALLEADING or DT_TOP);
//(d)// Icon tanımlı ise onu da şimdi basmanın zamanı, yoksa icon da görünmez...
if (TMenuItem(sender).ImageIndex >= 0) and (TMenuItem(sender).GetImageList <> nil) then
begin
TMenuItem(sender).GetImageList.Draw(ACanvas, ARect.Left + 4, ARect.Top + 2, TMenuItem(sender).ImageIndex);
end;
end;
Başarılar.
Re: Main Menü'ye tasarım eklemek istiyorum
Çok yardımcı oldunuz başka hiçbir yerde örnek filan bulamamıştım emeğinize sağlık.mrmarman yazdı:Önce:
Sonra:
Hazırladığım örneğin kaynak kodlu proje paketini bu linkten indirebilirsin.Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject); Var Sayac : Integer; begin MainMenu1.OwnerDraw := True; For Sayac := 0 to ComponentCount-1 do begin If Components[Sayac] is TMenuItem then begin With TMenuItem(Components[Sayac]) do begin If Caption <> '-' then begin OnDrawItem := MenuItemDrawItem; end; end; end; end; end; procedure TForm1.MenuItemDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); var strMenuBasligi : string; MenuRect : TRect; begin strMenuBasligi := TMenuItem(sender).Caption; //(1)// Arka Fonu Temizleyelim... ACanvas.Brush.Style := bsSolid; ACanvas.Brush.Color := clBtnFace; ACanvas.FillRect(ARect); //(2)// Seçili Olan Item'in Reklerini Ayarlayalım... if Selected then begin //(a)// Seçili Item'in içini ele alalım... ACanvas.Brush.Style := bsSolid; // Dolgu modunda olsun, içini boyasın... ACanvas.Brush.Color := clYellow; // İç boyası Sarı olsun... ACanvas.FillRect(ARect); // Item'in içini boyayla doldurduk. Yazı falan yok. //(b)// Seçili Item'in içi farklı, çerçevesi farklı olsun istedik diyelim... ACanvas.Brush.Style := bsClear; // Transparan modunda olsun, içini boş bıraksın... ACanvas.Pen.Color := clRed; // Çerçeve rengi Kırmızı olsun... ACanvas.Pen.Width := 3; // Çerçeve biraz kalın olsun... ACanvas.Pen.Style := psInsideFrame; // Çerçeve Item sınırlarıda olsun... ACanvas.Rectangle( ARect.Left, ARect.Top, ARect.Right, ARect.Bottom ); end; //(c)// Item yazılarını yazalım... ACanvas.Brush.Style := bsClear; // Transparan modunda olsun, içini boş bıraksın... ACanvas.Font.Style := [fsBold]; ACanvas.Font.Color := clBlack; MenuRect.Left := ARect.Left + 25; // Menü içerisinde yazının konumunu belirliyoruz... MenuRect.Right := ARect.Right - 5; MenuRect.Top := ARect.Top + 2; MenuRect.Bottom := ARect.Bottom - 2; DrawText(ACanvas.Handle, PChar(strMenuBasligi), length(strMenuBasligi), MenuRect, DT_LEFT or DT_EXTERNALLEADING or DT_TOP); //(d)// Icon tanımlı ise onu da şimdi basmanın zamanı, yoksa icon da görünmez... if (TMenuItem(sender).ImageIndex >= 0) and (TMenuItem(sender).GetImageList <> nil) then begin TMenuItem(sender).GetImageList.Draw(ACanvas, ARect.Left + 4, ARect.Top + 2, TMenuItem(sender).ImageIndex); end; end;
Başarılar.
Re: Main Menü'ye tasarım eklemek istiyorum
- Gördüğünüz üzere sıradan CANVAS boyama işlemleridir.
- Sadece her MenuItem'inin bundan pay çıkarması için döngü ile projenin OnShow olayında olabilir, OnCreate olayında olabilir; button altındaki döngüyü kurmanız kafidir. Siz yeni menu eklediğinizde kendiliğinden sisteme dahil olmuş olacaktır. Unutma gibi bir durum yaşamazsınız.
- OnMeasureItem eventi de vardır demiştim ya, onunla da dilediğiniz menünüitem'inin boyutlarıyla oynayabiliyorsunuz. Projelerimin çoğunda kullandığım şekliyle, her menuitem'in yüksekliğini farklı farklı yapmış, bu HINT'e atadığım metni, her menü başlığının altına yazdırmıştım. Böylece kullanıcı menünün ne amaçla kullanıldığını anlayabiliyordu. Ayarlar kısmına HINT'leri gizle diye bir opsiyon koymuş, artık bu menü başlıkları öğrenildikten sonra sadece başlıkların yer aldığı, detay açıklamaların görünmediği forma kendiliğinden dönüşmesini sağlamıştım.
- Sadece her MenuItem'inin bundan pay çıkarması için döngü ile projenin OnShow olayında olabilir, OnCreate olayında olabilir; button altındaki döngüyü kurmanız kafidir. Siz yeni menu eklediğinizde kendiliğinden sisteme dahil olmuş olacaktır. Unutma gibi bir durum yaşamazsınız.
- OnMeasureItem eventi de vardır demiştim ya, onunla da dilediğiniz menünüitem'inin boyutlarıyla oynayabiliyorsunuz. Projelerimin çoğunda kullandığım şekliyle, her menuitem'in yüksekliğini farklı farklı yapmış, bu HINT'e atadığım metni, her menü başlığının altına yazdırmıştım. Böylece kullanıcı menünün ne amaçla kullanıldığını anlayabiliyordu. Ayarlar kısmına HINT'leri gizle diye bir opsiyon koymuş, artık bu menü başlıkları öğrenildikten sonra sadece başlıkların yer aldığı, detay açıklamaların görünmediği forma kendiliğinden dönüşmesini sağlamıştım.
Re: Main Menü'ye tasarım eklemek istiyorum
Sizinki gerçekten çok güzel olmuş ellerinize sağlık. Ben daha yeni başladım delphiye projem vardı. Menü tasarımlarıyla ilgili pek bir şey bulamadığım için sıradan yapmıştım. Şimdi renkleriyle değilde sizin gibi büyütmeye çalışıcam. Teşekkürler ilgiliniz içinmrmarman yazdı:- Gördüğünüz üzere sıradan CANVAS boyama işlemleridir.
- Sadece her MenuItem'inin bundan pay çıkarması için döngü ile projenin OnShow olayında olabilir, OnCreate olayında olabilir; button altındaki döngüyü kurmanız kafidir. Siz yeni menu eklediğinizde kendiliğinden sisteme dahil olmuş olacaktır. Unutma gibi bir durum yaşamazsınız.
- OnMeasureItem eventi de vardır demiştim ya, onunla da dilediğiniz menünüitem'inin boyutlarıyla oynayabiliyorsunuz. Projelerimin çoğunda kullandığım şekliyle, her menuitem'in yüksekliğini farklı farklı yapmış, bu HINT'e atadığım metni, her menü başlığının altına yazdırmıştım. Böylece kullanıcı menünün ne amaçla kullanıldığını anlayabiliyordu. Ayarlar kısmına HINT'leri gizle diye bir opsiyon koymuş, artık bu menü başlıkları öğrenildikten sonra sadece başlıkların yer aldığı, detay açıklamaların görünmediği forma kendiliğinden dönüşmesini sağlamıştım.
Re: Main Menü'ye tasarım eklemek istiyorum
Hocam Mainmenu özelleştirmek için "OnMeasureItem eventi de vardır " demişsniz sizi yanlış anlamadıysam google da herhangi bir kaynak bulamadım
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Main Menü'ye tasarım eklemek istiyorum
MainMenu için eklediğin her itemin ayrı ayrı vardır. Mesajda da belirttiğim üzere her itemi bağımsız bir şekilde özelleştirme imkanı vardır demiştim. Bu amaca yönelik kullanılıyor.
TMainMenu ekledin ya, ona eklediğin Menu başlıklarının her birinin eventinde bulabilirsiniz.
TMainMenu ekledin ya, ona eklediğin Menu başlıklarının her birinin eventinde bulabilirsiniz.