![]() |
| Clomosy Resmi Forum Sitesidir. Amacımız kullanıcılarımıza, iş ortaklarımıza, danışmanlara, yazılımcılara programlarımız hakkında destek ve bilgi vermektir. |
metin "10 Kullanci" ve nokta ayni satir degil |
Yanıt Yaz
|
| Yazar | |
Barthe_dev
Yeni Üye
Kayıt Tarihi: 07 Temmuz 2026 Konum: konya Durum: Aktif Değil Puanlar: 25 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı Barthe_dev
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Teşekkürler(0)
Alıntı Cevapla
Konu: metin "10 Kullanci" ve nokta ayni satir degilGönderim Zamanı: 7 Saat 60 Dakika Önce Saat 16:57 |
|
var MembersForm : TclForm; ScrollBox : TCLVertScrollBox; ShellContainer : TclLayout; // Layouts de la page (Déclarés dans l'ordre inverse pour le rendu alTop) UserListContainer : TclLayout; FilterLayout : TclLayout; SearchLayout : TclLayout; HeaderLayout,HeaderLayoutactif,layout2,layout3,layout4 : TclLayout; StatusBarLayout : TclLayout; // Éléments du Header BtnBack : TclProButton; BtnAddUser : TclProButton; LblHeaderTitle,label1,label2,label3,label4 : TclProLabel; DotCyan, DotGreen, DotOrange : TclProPanel; TimerPulsation : TclTimer; PulsationState : Boolean; // Variable pour suivre l'état de l'effet de respiration // Zone de recherche SearchEdit : TclProEdit; // Filtres BtnFilterAll, BtnFilterAdmin, BtnFilterDepot, BtnFilterSekreter : TclProButton; // Cartes Utilisateurs UserCard1, UserCard2, UserCard3 : TclProPanel; // Barre de navigation inférieure (Tab Bar) TabBarLayout : TclLayout; BtnTabDash, BtnTabUsers, BtnTabStock, BtnTabReports, BtnTabSettings : TclProButton; // --------------------------------------------------------- // COMPOSANT MODULAIRE : GÉNÉRATEUR DE CARTES UTILISATEUR (UserCard) // --------------------------------------------------------- function CreateUserCard(AParent : TObject; AName, AFullName, ARole, AInitials, AStatusColor, AAvatarBgColor : String) : TclProPanel; var CardPanel, AvatarPanel, StatusDot : TclProPanel; LblInitials, LblName, LblRole : TclProLabel; TextLayout : TclLayout; BtnDelete : TclProButton; { CardPanel = MembersForm.AddNewProPanel(AParent, AName); CardPanel.Align = alTop; CardPanel.Height = 72; CardPanel.Margins.Left = 4; CardPanel.Margins.Right = 4; CardPanel.Margins.Top = 8; // Styles de la carte (Navy dark, bordure acier) CardPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); CardPanel.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); CardPanel.clProSettings.BorderWidth = 1; CardPanel.clProSettings.RoundWidth = 14; CardPanel.clProSettings.RoundHeight = 14; CardPanel.SetclProSettings(CardPanel.clProSettings); // 1. Avatar de l'utilisateur (Rond à gauche) AvatarPanel = MembersForm.AddNewProPanel(CardPanel, AName + '_Avatar'); AvatarPanel.Align = alLeft; AvatarPanel.Width = 44; AvatarPanel.Height = 44; AvatarPanel.Margins.Left = 12; AvatarPanel.Margins.Top = 14; AvatarPanel.Margins.Bottom = 14; AvatarPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AAvatarBgColor); AvatarPanel.clProSettings.RoundWidth = 22; AvatarPanel.clProSettings.RoundHeight = 22; AvatarPanel.SetclProSettings(AvatarPanel.clProSettings); LblInitials = MembersForm.AddNewProLabel(AvatarPanel, AName + '_Initials', AInitials); LblInitials.Align = alCenter; LblInitials.Width = 22; LblInitials.Height = 20; LblInitials.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); LblInitials.clProSettings.FontSize = 14; LblInitials.clProSettings.TextSettings.Font.Style = [fsBold]; //LblInitials.clProSettings.TextSettings.HorzAlign = clTextAlignCenter; LblInitials.SetclProSettings(LblInitials.clProSettings); // 2. Zone des textes (Nom & Rôle) TextLayout = MembersForm.AddNewLayout(CardPanel, AName + '_TextLay'); TextLayout.Align = alLeft; TextLayout.Width = 160; TextLayout.Margins.Left = 12; LblName = MembersForm.AddNewProLabel(TextLayout, AName + '_Name', AFullName); LblName.Align = alTop; LblName.Height = 20; LblName.Margins.Top = 16; LblName.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); LblName.clProSettings.FontSize = 14; LblName.clProSettings.TextSettings.Font.Style = [fsBold]; LblName.SetclProSettings(LblName.clProSettings); LblRole = MembersForm.AddNewProLabel(TextLayout, AName + '_Role', ARole); LblRole.Align = alTop; LblRole.Height = 16; LblRole.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); LblRole.clProSettings.FontSize = 11; LblRole.SetclProSettings(LblRole.clProSettings); // 3. Bouton d'action à droite (Corbeille de suppression) BtnDelete = MembersForm.AddNewProButton(CardPanel, AName + '_BtnDel', ''); BtnDelete.Align = alRight; BtnDelete.Width = 30; BtnDelete.Height = 30; BtnDelete.Margins.Right = 12; BtnDelete.Margins.Top = 21; BtnDelete.Margins.Bottom = 21; BtnDelete.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#ff4d6a15'); // Fond rouge transparent BtnDelete.clProSettings.RoundWidth = 8; BtnDelete.clProSettings.RoundHeight = 8; // Icône de suppression blanche/rouge MembersForm.SetImage(BtnDelete, 'https://raw.githubusercontent.com/Barthez2023/Artificial_Intelligence/main/clomosyImage/img10.png'); BtnDelete.SetclProSettings(BtnDelete.clProSettings); // 4. Point indicateur de statut en ligne / hors ligne (Glow Dot) StatusDot = MembersForm.AddNewProPanel(CardPanel, AName + '_StatusDot'); StatusDot.Align = alRight; StatusDot.Width = 8; StatusDot.Height = 8; StatusDot.Margins.Right = 16; StatusDot.Margins.Top = 32; StatusDot.Margins.Bottom = 32; StatusDot.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AStatusColor); StatusDot.clProSettings.RoundWidth = 4; StatusDot.clProSettings.RoundHeight = 4; StatusDot.SetclProSettings(StatusDot.clProSettings); Result = CardPanel; } // --------------------------------------------------------- // ACTIONS & ÉVÉNEMENTS // --------------------------------------------------------- void OnBackClick; { MembersForm.Close; } void OnAddUserClick; { ShowMessage('Ouverture du formulaire d''ajout de membre...'); } void OnTimerRespiration; { if (PulsationState) { // Étape basse : On atténue la luminosité en ajoutant de la transparence ('40' à la fin du code Hexa) DotCyan.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff40'); DotGreen.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4ade8040'); DotOrange.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#fb923c40'); PulsationState = False; } else { // Étape haute : On restaure la pleine opacité d'origine DotCyan.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff'); DotGreen.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4ade80'); DotOrange.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#fb923c'); PulsationState = True; } // Mise à jour indispensable du rendu visuel de chaque point DotCyan.SetclProSettings(DotCyan.clProSettings); DotGreen.SetclProSettings(DotGreen.clProSettings); DotOrange.SetclProSettings(DotOrange.clProSettings); } // --------------------------------------------------------- // INITIALISATION DE LA PAGE GESTION DES MEMBRES // --------------------------------------------------------- { MembersForm = TclForm.Create(Self); MembersForm.SetFormColor('#080d14', '#080d14', clGVertical); ScrollBox = MembersForm.AddNewVertScrollBox(MembersForm, 'ScrollBox'); ScrollBox.Align = alClient; ShellContainer = MembersForm.AddNewLayout(ScrollBox, 'ShellContainer'); ShellContainer.Align = alTop; ShellContainer.Height = 812; ShellContainer.Margins.Left = 16; ShellContainer.Margins.Right = 16; ShellContainer.Margins.Top = 10; // ========================================================================= // ORDRE DE RENDU INVERSÉ ALTOP (Du bas vers le haut) // ========================================================================= // [ ÉTAPE 4 : LISTE DES UTILISATEURS (User List Container) ] UserListContainer = MembersForm.AddNewLayout(ShellContainer, 'UserListContainer'); UserListContainer.Align = alTop; UserListContainer.Height = 400; UserListContainer.Margins.Top = 10; // Injection des membres avec notre générateur modulaire UserCard1 = CreateUserCard(UserListContainer, 'UserAli', 'Ali Yılmaz', 'Administrateur', 'AY', '#22c55e', '#1d4ed8'); UserCard2 = CreateUserCard(UserListContainer, 'UserAyse', 'Ayşe Demir', 'Dépôt Sorumlusu', 'AD', '#22c55e', '#a855f7'); UserCard3 = CreateUserCard(UserListContainer, 'UserMehmet', 'Mehmet Kaya', 'Secrétaire', 'MK', '#ff4d6a', '#dd7b40'); // [ ÉTAPE 3 : BARRE DE FILTRES RAPIDES ] FilterLayout = MembersForm.AddNewLayout(ShellContainer, 'FilterLayout'); FilterLayout.Align = alTop; FilterLayout.Height = 40; FilterLayout.Margins.Top = 12; BtnFilterAll = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterAll', 'Tous'); BtnFilterAll.Align = alLeft; BtnFilterAll.Width = 65; BtnFilterAll.Height = 32; BtnFilterAll.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff'); // Filtre Actif BtnFilterAll.clProSettings.FontColor = clAlphaColor.clHexToColor('#080d14'); BtnFilterAll.clProSettings.FontSize = 11; BtnFilterAll.clProSettings.TextSettings.Font.Style = [fsBold]; BtnFilterAll.clProSettings.RoundWidth = 8; BtnFilterAll.clProSettings.RoundHeight = 8; BtnFilterAll.SetclProSettings(BtnFilterAll.clProSettings); BtnFilterAdmin = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterAdmin', 'Admins'); BtnFilterAdmin.Align = alLeft; BtnFilterAdmin.Width = 75; BtnFilterAdmin.Height = 32; BtnFilterAdmin.Margins.Left = 6; BtnFilterAdmin.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnFilterAdmin.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); BtnFilterAdmin.clProSettings.BorderWidth = 1; BtnFilterAdmin.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); BtnFilterAdmin.clProSettings.FontSize = 11; BtnFilterAdmin.clProSettings.RoundWidth = 8; BtnFilterAdmin.clProSettings.RoundHeight = 8; BtnFilterAdmin.SetclProSettings(BtnFilterAdmin.clProSettings); BtnFilterDepot = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterDepot', 'Dépôt'); BtnFilterDepot.Align = alLeft; BtnFilterDepot.Width = 75; BtnFilterDepot.Height = 32; BtnFilterDepot.Margins.Left = 6; BtnFilterDepot.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnFilterDepot.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); BtnFilterDepot.clProSettings.BorderWidth = 1; BtnFilterDepot.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); BtnFilterDepot.clProSettings.FontSize = 11; BtnFilterDepot.clProSettings.RoundWidth = 8; BtnFilterDepot.clProSettings.RoundHeight = 8; BtnFilterDepot.SetclProSettings(BtnFilterDepot.clProSettings); BtnFilterSekreter = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterSekreter', 'Secrétaires'); BtnFilterSekreter.Align = alClient; BtnFilterSekreter.Height = 32; BtnFilterSekreter.Margins.Left = 6; BtnFilterSekreter.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnFilterSekreter.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); BtnFilterSekreter.clProSettings.BorderWidth = 1; BtnFilterSekreter.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); BtnFilterSekreter.clProSettings.FontSize = 11; BtnFilterSekreter.clProSettings.RoundWidth = 8; BtnFilterSekreter.clProSettings.RoundHeight = 8; BtnFilterSekreter.SetclProSettings(BtnFilterSekreter.clProSettings); // [ ÉTAPE 2 : BARRE DE RECHERCHE (SearchEdit) ] SearchLayout = MembersForm.AddNewLayout(ShellContainer, 'SearchLayout'); SearchLayout.Align = alTop; SearchLayout.Height = 46; SearchLayout.Margins.Top = 12; SearchEdit = MembersForm.AddNewProEdit(SearchLayout, 'SearchEdit', 'Rechercher un membre...'); SearchEdit.Align = alClient; SearchEdit.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); SearchEdit.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); SearchEdit.clProSettings.BorderWidth = 1; SearchEdit.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); SearchEdit.clProSettings.FontSize = 12; SearchEdit.clProSettings.RoundWidth = 10; SearchEdit.clProSettings.RoundHeight = 10; SearchEdit.SetclProSettings(SearchEdit.clProSettings); // [ ÉTAPE 1 : HEADER GESTION DES MEMBRES ] HeaderLayout = MembersForm.AddNewLayout(ShellContainer, 'HeaderLayout'); HeaderLayout.Align = alTop; HeaderLayout.Height = 55; // Bouton Retour (Gauche) label1 = MembersForm.AddNewProLabel(HeaderLayout, 'label1', 'GESTIONNAIRES DES UTILISATEURS'); label1.Align = alTop; label1.Margins.Left = 14; label1.Margins.Top = 16; label1.clProSettings.FontColor = clAlphaColor.clHexToColor('#446580'); label1.clProSettings.FontSize = 12; label1.clProSettings.TextSettings.Font.Style = [fsBold]; label1.SetclProSettings(label1.clProSettings); // Titre "MEMBRES" (Centre) LblHeaderTitle = MembersForm.AddNewProLabel(HeaderLayout, 'LblHeaderTitle', 'Utilisateurs & roles'); LblHeaderTitle.Align = alTop; LblHeaderTitle.Margins.Left = 14; LblHeaderTitle.Height = 40; LblHeaderTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); LblHeaderTitle.clProSettings.FontSize = 30; LblHeaderTitle.clProSettings.TextSettings.Font.Style = [fsBold]; LblHeaderTitle.SetclProSettings(LblHeaderTitle.clProSettings); // [ ÉTAPE x : HEADER GESTION DES MEMBRES actifs ] HeaderLayoutactif = MembersForm.AddNewLayout(ShellContainer, 'HeaderLayoutactif'); HeaderLayoutactif.Align = alTop; HeaderLayoutactif.Height = 55; //creation du layout2 layout2 = MembersForm.AddNewLayout(HeaderLayoutactif, 'layout2'); layout2.Align = alLeft; layout2.Height = 55; layout2.Width = 120; layout2.Margins.Left = 14; layout2.Margins.Top = 10; //creation du Dot DotCyan = MembersForm.AddNewProPanel(layout2, 'DotCyan'); DotCyan.Align = alLeft; DotCyan.Width = 8; DotCyan.Height = 8; DotCyan.Margins.Right =6; DotCyan.Margins.Bottom = 35; DotCyan.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff'); // Opaque au départ DotCyan.clProSettings.RoundWidth = 4; DotCyan.clProSettings.RoundHeight = 4; DotCyan.SetclProSettings(DotCyan.clProSettings); label2 = MembersForm.AddNewProLabel(layout2, 'label2', '10 Membres'); label2.Align = alLeft; label2.Width = 90; label2.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); label2.clProSettings.FontSize = 14; label2.clProSettings.TextSettings.Font.Style = [fsBold]; label2.SetclProSettings(label2.clProSettings); //creation du layout3 layout3 = MembersForm.AddNewLayout(HeaderLayoutactif, 'layout3'); layout3.Align = alLeft; layout3.Height = 55; layout3.Width = 110; layout3.Margins.Left = 14; layout3.Margins.Top = 10; // --- 2. GROUPE ACTIFS (VERT) --- label3 = MembersForm.AddNewProLabel(layout3, 'label3', '5 Actifs'); label3.Align = alLeft; label3.Width = 80; label3.Margins.Left = 10; label3.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80'); label3.clProSettings.FontSize = 14; label3.clProSettings.TextSettings.Font.Style = [fsBold]; label3.SetclProSettings(label3.clProSettings); DotGreen = MembersForm.AddNewProPanel(layout3, 'DotGreen'); DotGreen.Align = alLeft; DotGreen.Width = 8; DotGreen.Height = 8; DotGreen.Margins.Right =10; DotGreen.Margins.Bottom =35; DotGreen.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4ade80'); DotGreen.clProSettings.RoundWidth = 4; DotGreen.clProSettings.RoundHeight = 4; DotGreen.SetclProSettings(DotGreen.clProSettings); //creation du layout4 layout4 = MembersForm.AddNewLayout(HeaderLayoutactif, 'layout4'); layout4.Align = alLeft; layout4.Height = 55; layout4.Width = 100; layout4.Margins.Left = 14; layout4.Margins.Top = 10; // --- 3. GROUPE INACTIFS (ORANGE) --- label4 = MembersForm.AddNewProLabel(layout4, 'label4', '5 Inactifs'); label4.Align = alLeft; label4.Width = 80; label4.Margins.Left = 10; //label4.Margins.Top = 16; label4.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c'); label4.clProSettings.FontSize = 14; label4.clProSettings.TextSettings.Font.Style = [fsBold]; label4.SetclProSettings(label4.clProSettings); DotOrange = MembersForm.AddNewProPanel(layout4, 'DotOrange'); DotOrange.Align = alLeft; DotOrange.Width = 8; DotOrange.Height = 8; DotOrange.Margins.Right =10; DotOrange.Margins.Bottom = 35; DotOrange.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#fb923c'); DotOrange.clProSettings.RoundWidth = 4; DotOrange.clProSettings.RoundHeight = 4; DotOrange.SetclProSettings(DotOrange.clProSettings); // --- CONFIGURATION DU TIMER DE RESPIRATION --- PulsationState = True; TimerPulsation = MembersForm.AddNewTimer(MembersForm, 'TimerPulsation', 750); // Toutes les 750ms pour une transition douce TimerPulsation.Enabled = True; MembersForm.AddNewEvent(TimerPulsation, tbeOnTimer, 'OnTimerRespiration'); // [ ÉTAPE 0 : BARRE D'ÉTAT SYSTÈME (Status Bar) ] StatusBarLayout = MembersForm.AddNewLayout(ShellContainer, 'StatusBarLayout'); StatusBarLayout.Align = alTop; StatusBarLayout.Height = 35; // ========================================================================= // BARRE DE NAVIGATION INFÉRIEURE (Tab Bar Active sur "Users") // ========================================================================= TabBarLayout = MembersForm.AddNewLayout(MembersForm, 'TabBarLayout'); TabBarLayout.Align = alBottom; TabBarLayout.Height = 58; BtnTabDash = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabDash', 'Dashboard'); BtnTabDash.Align = alLeft; BtnTabDash.Width = 74; BtnTabDash.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabDash.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabDash.clProSettings.FontSize = 9; BtnTabDash.SetclProSettings(BtnTabDash.clProSettings); BtnTabUsers = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabUsers', 'Membres'); BtnTabUsers.Align = alLeft; BtnTabUsers.Width = 74; BtnTabUsers.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabUsers.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); // Actif (Bleu Glowing) BtnTabUsers.clProSettings.FontSize = 9; BtnTabUsers.clProSettings.TextSettings.Font.Style = [fsBold]; BtnTabUsers.SetclProSettings(BtnTabUsers.clProSettings); BtnTabStock = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabStock', 'Stock'); BtnTabStock.Align = alLeft; BtnTabStock.Width = 74; BtnTabStock.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabStock.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabStock.clProSettings.FontSize = 9; BtnTabStock.SetclProSettings(BtnTabStock.clProSettings); BtnTabReports = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabReports', 'Reports'); BtnTabReports.Align = alLeft; BtnTabReports.Width = 74; BtnTabReports.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabReports.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabReports.clProSettings.FontSize = 9; BtnTabReports.SetclProSettings(BtnTabReports.clProSettings); BtnTabSettings = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabSettings', 'Settings'); BtnTabSettings.Align = alClient; BtnTabSettings.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabSettings.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabSettings.clProSettings.FontSize = 9; BtnTabSettings.SetclProSettings(BtnTabSettings.clProSettings); MembersForm.Run; } |
|
![]() |
|
kayra12
Deneyimli Üye
Kayıt Tarihi: 23 Aralık 2024 Durum: Aktif Değil Puanlar: 63 |
Mesaj Seçenekleri
Teşekkürler(0)
Alıntı Cevapla
Gönderim Zamanı: 7 Saat 47 Dakika Önce Saat 17:10 |
|
İyi çalışmalar dilerim var MembersForm : TclForm; ScrollBox : TCLVertScrollBox; ShellContainer : TclLayout; // Layouts de la page (Déclarés dans l'ordre inverse pour le rendu alTop) UserListContainer : TclLayout; FilterLayout : TclLayout; SearchLayout : TclLayout; HeaderLayout,HeaderLayoutactif,layout2,layout3,layout4 : TclLayout; StatusBarLayout : TclLayout; // Éléments du Header BtnBack : TclProButton; BtnAddUser : TclProButton; LblHeaderTitle,label1,label2,label3,label4 : TclProLabel; DotCyan, DotGreen, DotOrange : TclProPanel; TimerPulsation : TclTimer; PulsationState : Boolean; // Variable pour suivre l'état de l'effet de respiration // Zone de recherche SearchEdit : TclProEdit; // Filtres BtnFilterAll, BtnFilterAdmin, BtnFilterDepot, BtnFilterSekreter : TclProButton; // Cartes Utilisateurs UserCard1, UserCard2, UserCard3 : TclProPanel; // Barre de navigation inférieure (Tab Bar) TabBarLayout : TclLayout; BtnTabDash, BtnTabUsers, BtnTabStock, BtnTabReports, BtnTabSettings : TclProButton; // --------------------------------------------------------- // COMPOSANT MODULAIRE : GÉNÉRATEUR DE CARTES UTILISATEUR (UserCard) // --------------------------------------------------------- function CreateUserCard(AParent : TObject; AName, AFullName, ARole, AInitials, AStatusColor, AAvatarBgColor : String) : TclProPanel; var CardPanel, AvatarPanel, StatusDot : TclProPanel; LblInitials, LblName, LblRole : TclProLabel; TextLayout : TclLayout; BtnDelete : TclProButton; { CardPanel = MembersForm.AddNewProPanel(AParent, AName); CardPanel.Align = alTop; CardPanel.Height = 72; CardPanel.Margins.Left = 4; CardPanel.Margins.Right = 4; CardPanel.Margins.Top = 8; // Styles de la carte (Navy dark, bordure acier) CardPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); CardPanel.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); CardPanel.clProSettings.BorderWidth = 1; CardPanel.clProSettings.RoundWidth = 14; CardPanel.clProSettings.RoundHeight = 14; CardPanel.SetclProSettings(CardPanel.clProSettings); // 1. Avatar de l'utilisateur (Rond à gauche) AvatarPanel = MembersForm.AddNewProPanel(CardPanel, AName + '_Avatar'); AvatarPanel.Align = alLeft; AvatarPanel.Width = 44; AvatarPanel.Height = 44; AvatarPanel.Margins.Left = 12; AvatarPanel.Margins.Top = 14; AvatarPanel.Margins.Bottom = 14; AvatarPanel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AAvatarBgColor); AvatarPanel.clProSettings.RoundWidth = 22; AvatarPanel.clProSettings.RoundHeight = 22; AvatarPanel.SetclProSettings(AvatarPanel.clProSettings); LblInitials = MembersForm.AddNewProLabel(AvatarPanel, AName + '_Initials', AInitials); LblInitials.Align = alCenter; LblInitials.Width = 22; LblInitials.Height = 20; LblInitials.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); LblInitials.clProSettings.FontSize = 14; LblInitials.clProSettings.TextSettings.Font.Style = [fsBold]; LblInitials.SetclProSettings(LblInitials.clProSettings); // 2. Zone des textes (Nom & Rôle) TextLayout = MembersForm.AddNewLayout(CardPanel, AName + '_TextLay'); TextLayout.Align = alLeft; TextLayout.Width = 160; TextLayout.Margins.Left = 12; LblName = MembersForm.AddNewProLabel(TextLayout, AName + '_Name', AFullName); LblName.Align = alTop; LblName.Height = 20; LblName.Margins.Top = 16; LblName.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); LblName.clProSettings.FontSize = 14; LblName.clProSettings.TextSettings.Font.Style = [fsBold]; LblName.SetclProSettings(LblName.clProSettings); LblRole = MembersForm.AddNewProLabel(TextLayout, AName + '_Role', ARole); LblRole.Align = alTop; LblRole.Height = 16; LblRole.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); LblRole.clProSettings.FontSize = 11; LblRole.SetclProSettings(LblRole.clProSettings); // 3. Bouton d'action à droite (Corbeille de suppression) BtnDelete = MembersForm.AddNewProButton(CardPanel, AName + '_BtnDel', ''); BtnDelete.Align = alRight; BtnDelete.Width = 30; BtnDelete.Height = 30; BtnDelete.Margins.Right = 12; BtnDelete.Margins.Top = 21; BtnDelete.Margins.Bottom = 21; BtnDelete.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#ff4d6a15'); // Fond rouge transparent BtnDelete.clProSettings.RoundWidth = 8; BtnDelete.clProSettings.RoundHeight = 8; // Icône de suppression blanche/rouge MembersForm.SetImage(BtnDelete, 'https://raw.githubusercontent.com/Barthez2023/Artificial_Intelligence/main/clomosyImage/img10.png'); BtnDelete.SetclProSettings(BtnDelete.clProSettings); // 4. Point indicateur de statut en ligne / hors ligne (Glow Dot) StatusDot = MembersForm.AddNewProPanel(CardPanel, AName + '_StatusDot'); StatusDot.Align = alRight; StatusDot.Width = 8; StatusDot.Height = 8; StatusDot.Margins.Right = 16; StatusDot.Margins.Top = 32; StatusDot.Margins.Bottom = 32; StatusDot.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AStatusColor); StatusDot.clProSettings.RoundWidth = 4; StatusDot.clProSettings.RoundHeight = 4; StatusDot.SetclProSettings(StatusDot.clProSettings); Result = CardPanel; } // --------------------------------------------------------- // ACTIONS & ÉVÉNEMENTS // --------------------------------------------------------- void OnBackClick; { MembersForm.Close; } void OnAddUserClick; { ShowMessage('Ouverture du formulaire d''ajout de membre...'); } void OnTimerRespiration; { if (PulsationState) { // Étape basse : On atténue la luminosité en ajoutant de la transparence ('40' à la fin du code Hexa) DotCyan.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff40'); DotGreen.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4ade8040'); DotOrange.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#fb923c40'); PulsationState = False; } else { // Étape haute : On restaure la pleine opacité d'origine DotCyan.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff'); DotGreen.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4ade80'); DotOrange.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#fb923c'); PulsationState = True; } // Mise à jour indispensable du rendu visuel de chaque point DotCyan.SetclProSettings(DotCyan.clProSettings); DotGreen.SetclProSettings(DotGreen.clProSettings); DotOrange.SetclProSettings(DotOrange.clProSettings); } // --------------------------------------------------------- // INITIALISATION DE LA PAGE GESTION DES MEMBRES // --------------------------------------------------------- { MembersForm = TclForm.Create(Self); MembersForm.SetFormColor('#080d14', '#080d14', clGVertical); ScrollBox = MembersForm.AddNewVertScrollBox(MembersForm, 'ScrollBox'); ScrollBox.Align = alClient; ShellContainer = MembersForm.AddNewLayout(ScrollBox, 'ShellContainer'); ShellContainer.Align = alTop; ShellContainer.Height = 812; ShellContainer.Margins.Left = 16; ShellContainer.Margins.Right = 16; ShellContainer.Margins.Top = 10; // ========================================================================= // ORDRE DE RENDU INVERSÉ ALTOP (Du bas vers le haut) // ========================================================================= // [ ÉTAPE 4 : LISTE DES UTILISATEURS (User List Container) ] UserListContainer = MembersForm.AddNewLayout(ShellContainer, 'UserListContainer'); UserListContainer.Align = alTop; UserListContainer.Height = 400; UserListContainer.Margins.Top = 10; // Injection des membres avec notre générateur modulaire UserCard1 = CreateUserCard(UserListContainer, 'UserAli', 'Ali Yılmaz', 'Administrateur', 'AY', '#22c55e', '#1d4ed8'); UserCard2 = CreateUserCard(UserListContainer, 'UserAyse', 'Ayşe Demir', 'Dépôt Sorumlusu', 'AD', '#22c55e', '#a855f7'); UserCard3 = CreateUserCard(UserListContainer, 'UserMehmet', 'Mehmet Kaya', 'Secrétaire', 'MK', '#ff4d6a', '#dd7b40'); // [ ÉTAPE 3 : BARRE DE FILTRES RAPIDES ] FilterLayout = MembersForm.AddNewLayout(ShellContainer, 'FilterLayout'); FilterLayout.Align = alTop; FilterLayout.Height = 40; FilterLayout.Margins.Top = 12; BtnFilterAll = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterAll', 'Tous'); BtnFilterAll.Align = alLeft; BtnFilterAll.Width = 65; BtnFilterAll.Height = 32; BtnFilterAll.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff'); // Filtre Actif BtnFilterAll.clProSettings.FontColor = clAlphaColor.clHexToColor('#080d14'); BtnFilterAll.clProSettings.FontSize = 11; BtnFilterAll.clProSettings.TextSettings.Font.Style = [fsBold]; BtnFilterAll.clProSettings.RoundWidth = 8; BtnFilterAll.clProSettings.RoundHeight = 8; BtnFilterAll.SetclProSettings(BtnFilterAll.clProSettings); BtnFilterAdmin = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterAdmin', 'Admins'); BtnFilterAdmin.Align = alLeft; BtnFilterAdmin.Width = 75; BtnFilterAdmin.Height = 32; BtnFilterAdmin.Margins.Left = 6; BtnFilterAdmin.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnFilterAdmin.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); BtnFilterAdmin.clProSettings.BorderWidth = 1; BtnFilterAdmin.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); BtnFilterAdmin.clProSettings.FontSize = 11; BtnFilterAdmin.clProSettings.RoundWidth = 8; BtnFilterAdmin.clProSettings.RoundHeight = 8; BtnFilterAdmin.SetclProSettings(BtnFilterAdmin.clProSettings); BtnFilterDepot = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterDepot', 'Dépôt'); BtnFilterDepot.Align = alLeft; BtnFilterDepot.Width = 75; BtnFilterDepot.Height = 32; BtnFilterDepot.Margins.Left = 6; BtnFilterDepot.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnFilterDepot.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); BtnFilterDepot.clProSettings.BorderWidth = 1; BtnFilterDepot.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); BtnFilterDepot.clProSettings.FontSize = 11; BtnFilterDepot.clProSettings.RoundWidth = 8; BtnFilterDepot.clProSettings.RoundHeight = 8; BtnFilterDepot.SetclProSettings(BtnFilterDepot.clProSettings); BtnFilterSekreter = MembersForm.AddNewProButton(FilterLayout, 'BtnFilterSekreter', 'Secrétaires'); BtnFilterSekreter.Align = alClient; BtnFilterSekreter.Height = 32; BtnFilterSekreter.Margins.Left = 6; BtnFilterSekreter.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnFilterSekreter.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); BtnFilterSekreter.clProSettings.BorderWidth = 1; BtnFilterSekreter.clProSettings.FontColor = clAlphaColor.clHexToColor('#6b8aaa'); BtnFilterSekreter.clProSettings.FontSize = 11; BtnFilterSekreter.clProSettings.RoundWidth = 8; BtnFilterSekreter.clProSettings.RoundHeight = 8; BtnFilterSekreter.SetclProSettings(BtnFilterSekreter.clProSettings); // [ ÉTAPE 2 : BARRE DE RECHERCHE (SearchEdit) ] SearchLayout = MembersForm.AddNewLayout(ShellContainer, 'SearchLayout'); SearchLayout.Align = alTop; SearchLayout.Height = 46; SearchLayout.Margins.Top = 12; SearchEdit = MembersForm.AddNewProEdit(SearchLayout, 'SearchEdit', 'Rechercher un membre...'); SearchEdit.Align = alClient; SearchEdit.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); SearchEdit.clProSettings.BorderColor = clAlphaColor.clHexToColor('#1a2d42'); SearchEdit.clProSettings.BorderWidth = 1; SearchEdit.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); SearchEdit.clProSettings.FontSize = 12; SearchEdit.clProSettings.RoundWidth = 10; SearchEdit.clProSettings.RoundHeight = 10; SearchEdit.SetclProSettings(SearchEdit.clProSettings); // [ ÉTAPE 1 : HEADER GESTION DES MEMBRES ] HeaderLayout = MembersForm.AddNewLayout(ShellContainer, 'HeaderLayout'); HeaderLayout.Align = alTop; HeaderLayout.Height = 55; // Bouton Retour (Gauche) label1 = MembersForm.AddNewProLabel(HeaderLayout, 'label1', 'GESTIONNAIRES DES UTILISATEURS'); label1.Align = alTop; label1.Margins.Left = 14; label1.Margins.Top = 16; label1.clProSettings.FontColor = clAlphaColor.clHexToColor('#446580'); label1.clProSettings.FontSize = 12; label1.clProSettings.TextSettings.Font.Style = [fsBold]; label1.SetclProSettings(label1.clProSettings); // Titre "MEMBRES" (Centre) LblHeaderTitle = MembersForm.AddNewProLabel(HeaderLayout, 'LblHeaderTitle', 'Utilisateurs & roles'); LblHeaderTitle.Align = alTop; LblHeaderTitle.Margins.Left = 14; LblHeaderTitle.Height = 40; LblHeaderTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); LblHeaderTitle.clProSettings.FontSize = 30; LblHeaderTitle.clProSettings.TextSettings.Font.Style = [fsBold]; LblHeaderTitle.SetclProSettings(LblHeaderTitle.clProSettings); // [ ÉTAPE x : HEADER GESTION DES MEMBRES actifs ] HeaderLayoutactif = MembersForm.AddNewLayout(ShellContainer, 'HeaderLayoutactif'); HeaderLayoutactif.Align = alTop; HeaderLayoutactif.Height = 55; // ====================================================== // LAYOUT 2 (Toplam Kullanıcı) - KUSURSUZ HİZALAMA VE NOKTA // ====================================================== layout2 = MembersForm.AddNewLayout(HeaderLayoutactif, 'layout2'); layout2.Align = alLeft; layout2.Height = 55; layout2.Width = 120; layout2.Margins.Left = 14; // Mavi Nokta DotCyan = MembersForm.AddNewProPanel(layout2, 'DotCyan'); DotCyan.Align = alLeft; DotCyan.Width = 8; DotCyan.Height = 8; DotCyan.Margins.Right = 6; DotCyan.Margins.Top = 24; // Dikey ortalama için üst boşluk DotCyan.Margins.Bottom = 23; // UZAMAYI ENGELLEYEN ALT BOŞLUK (55-24-23 = 8px yükseklik) DotCyan.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#00d4ff'); DotCyan.clProSettings.RoundWidth = 4; DotCyan.clProSettings.RoundHeight = 4; DotCyan.SetclProSettings(DotCyan.clProSettings); label2 = MembersForm.AddNewProLabel(layout2, 'label2', '10 Kullanıcı'); label2.Align = alLeft; label2.Width = 90; label2.Height = 20; label2.Margins.Top = 18; // Metin dikey merkezleme label2.Margins.Bottom = 17; // Metin dikey merkezleme alt sınır label2.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); label2.clProSettings.FontSize = 14; label2.clProSettings.TextSettings.Font.Style = [fsBold]; label2.SetclProSettings(label2.clProSettings); // ====================================================== // LAYOUT 3 (Aktif Kullanıcı) - KUSURSUZ HİZALAMA VE NOKTA // ====================================================== layout3 = MembersForm.AddNewLayout(HeaderLayoutactif, 'layout3'); layout3.Align = alLeft; layout3.Height = 55; layout3.Width = 110; layout3.Margins.Left = 14; // Yeşil Nokta (Önce nokta, sonra yazı eklendi) DotGreen = MembersForm.AddNewProPanel(layout3, 'DotGreen'); DotGreen.Align = alLeft; DotGreen.Width = 8; DotGreen.Height = 8; DotGreen.Margins.Right = 6; DotGreen.Margins.Top = 24; // Dikey ortalama için üst boşluk DotGreen.Margins.Bottom = 23; // UZAMAYI ENGELLEYEN ALT BOŞLUK (55-24-23 = 8px yükseklik) DotGreen.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4ade80'); DotGreen.clProSettings.RoundWidth = 4; DotGreen.clProSettings.RoundHeight = 4; DotGreen.SetclProSettings(DotGreen.clProSettings); label3 = MembersForm.AddNewProLabel(layout3, 'label3', '5 Aktif'); label3.Align = alLeft; label3.Width = 80; label3.Height = 20; label3.Margins.Top = 18; // Metin dikey merkezleme label3.Margins.Bottom = 17; // Metin dikey merkezleme alt sınır label3.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80'); label3.clProSettings.FontSize = 14; label3.clProSettings.TextSettings.Font.Style = [fsBold]; label3.SetclProSettings(label3.clProSettings); // ====================================================== // LAYOUT 4 (İnaktif Kullanıcı) - KUSURSUZ HİZALAMA VE NOKTA // ====================================================== layout4 = MembersForm.AddNewLayout(HeaderLayoutactif, 'layout4'); layout4.Align = alLeft; layout4.Height = 55; layout4.Width = 110; layout4.Margins.Left = 14; // Turuncu Nokta (Önce nokta, sonra yazı eklendi) DotOrange = MembersForm.AddNewProPanel(layout4, 'DotOrange'); DotOrange.Align = alLeft; DotOrange.Width = 8; DotOrange.Height = 8; DotOrange.Margins.Right = 6; DotOrange.Margins.Top = 24; // Dikey ortalama için üst boşluk DotOrange.Margins.Bottom = 23; // UZAMAYI ENGELLEYEN ALT BOŞLUK (55-24-23 = 8px yükseklik) DotOrange.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#fb923c'); DotOrange.clProSettings.RoundWidth = 4; DotOrange.clProSettings.RoundHeight = 4; DotOrange.SetclProSettings(DotOrange.clProSettings); label4 = MembersForm.AddNewProLabel(layout4, 'label4', '5 İnaktif'); label4.Align = alLeft; label4.Width = 80; label4.Height = 20; label4.Margins.Top = 18; // Metin dikey merkezleme label4.Margins.Bottom = 17; // Metin dikey merkezleme alt sınır label4.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c'); label4.clProSettings.FontSize = 14; label4.clProSettings.TextSettings.Font.Style = [fsBold]; label4.SetclProSettings(label4.clProSettings); // --- CONFIGURATION DU TIMER DE RESPIRATION --- PulsationState = True; TimerPulsation = MembersForm.AddNewTimer(MembersForm, 'TimerPulsation', 750); // Toutes les 750ms pour une transition douce TimerPulsation.Enabled = True; MembersForm.AddNewEvent(TimerPulsation, tbeOnTimer, 'OnTimerRespiration'); // [ ÉTAPE 0 : BARRE D'ÉTAT SYSTÈME (Status Bar) ] StatusBarLayout = MembersForm.AddNewLayout(ShellContainer, 'StatusBarLayout'); StatusBarLayout.Align = alTop; StatusBarLayout.Height = 35; // ========================================================================= // BARRE DE NAVIGATION INFÉRIEURE (Tab Bar Active sur "Users") // ========================================================================= TabBarLayout = MembersForm.AddNewLayout(MembersForm, 'TabBarLayout'); TabBarLayout.Align = alBottom; TabBarLayout.Height = 58; BtnTabDash = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabDash', 'Dashboard'); BtnTabDash.Align = alLeft; BtnTabDash.Width = 74; BtnTabDash.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabDash.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabDash.clProSettings.FontSize = 9; BtnTabDash.SetclProSettings(BtnTabDash.clProSettings); BtnTabUsers = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabUsers', 'Membres'); BtnTabUsers.Align = alLeft; BtnTabUsers.Width = 74; BtnTabUsers.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabUsers.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); // Actif (Bleu Glowing) BtnTabUsers.clProSettings.FontSize = 9; BtnTabUsers.clProSettings.TextSettings.Font.Style = [fsBold]; BtnTabUsers.SetclProSettings(BtnTabUsers.clProSettings); BtnTabStock = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabStock', 'Stock'); BtnTabStock.Align = alLeft; BtnTabStock.Width = 74; BtnTabStock.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabStock.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabStock.clProSettings.FontSize = 9; BtnTabStock.SetclProSettings(BtnTabStock.clProSettings); BtnTabReports = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabReports', 'Reports'); BtnTabReports.Align = alLeft; BtnTabReports.Width = 74; BtnTabReports.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabReports.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabReports.clProSettings.FontSize = 9; BtnTabReports.SetclProSettings(BtnTabReports.clProSettings); BtnTabSettings = MembersForm.AddNewProButton(TabBarLayout, 'BtnTabSettings', 'Settings'); BtnTabSettings.Align = alClient; BtnTabSettings.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#0d1520'); BtnTabSettings.clProSettings.FontColor = clAlphaColor.clHexToColor('#3d5a7a'); BtnTabSettings.clProSettings.FontSize = 9; BtnTabSettings.SetclProSettings(BtnTabSettings.clProSettings); MembersForm.Run; } |
|
![]() |
|
Yanıt Yaz
|
|
| Tweet |
| Forum Atla | Forum İzinleri ![]() Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |