CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - StringGrid - Opcje

StringGrid - Opcje

dział ogólny

StringGrid - Opcje

Nowy postprzez Pitek » niedziela, 12 września 2010, 00:42

Witam!
Mam pytanie w jaki sposób można za pomocą kodu sterować opcją komponentu StringGrid chodzi o goEditing ?
Czy da się ją jakoś prosto załączyć i wyłączyć podczas działania programu ?
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: StringGrid - Opcje

Nowy postprzez Corvis » niedziela, 12 września 2010, 01:49

Włączenie:
KOD cpp:     UKRYJ  
StringGrid1->Options = TGridOptions() << goEditing;


Wyłączenie:
KOD cpp:     UKRYJ  
StringGrid1->Options = TGridOptions() >> goEditing;
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaOpera

Re: StringGrid - Opcje

Nowy postprzez Pitek » niedziela, 12 września 2010, 10:29

Nie wątpię że te kody są dobre tylko może za dużo chciałem wykombinować sam.
Chodzi mi o to żeby po kliknięciu w 3 kolumnę StringGrid odblokowała się możliwość pisania i tylko tam.
Taki kod mi nie działa:
KOD cpp:     UKRYJ  
void __fastcall TForm1::StringGrid2Click(TObject *Sender)
{
if(StringGrid2->Col == 3)
{
 StringGrid1->Options = TGridOptions() << goEditing;
}
}
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: StringGrid - Opcje

Nowy postprzez Cyfrowy Baron » niedziela, 12 września 2010, 10:58

Obiekt typu TStringGrid nie posiada żadnych funkcji, które umożliwiałyby wyłączanie edycji całej tabeli i włączanie edycji wybranych komórek. Łatwo zrobić się tego nie da. Takie możliwości posiada, np. komponent TAdvGrid z pakietu TMS Components Pack, ale są to komponenty komercyjne.

Problem można rozwiązać łącząc tabele StringGrid z obiektem typu TEdit, czyli polegałoby to na tym, że wyłączasz edycję całej tabeli, a po kliknięciu na wybranej komórce w jej pozycji wyskakuje pole typu TEdit, które dopasowuje się rozmiarem do komórki. Wpisujesz tekst w pole Edit, a po naciśnięciu np. przycisku ENTER lub przejściu do innej komórki, tekst z pola Edit zostaje wpisany do komórki, a pole Edit znika.

Taki mechanizm opisałem w serwisie Cyfrowy Baron w dziale: porady -> StringGrid porada: Wstawianie obiektu ComboBox do obiektu StringGrid.
Przykład bazuje na obiekcie typu TComboBox, ale można go bez problemu zastąpić obiektem typu TEdit.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - Opcje

Nowy postprzez Pitek » niedziela, 12 września 2010, 11:25

Jest ok pojawia się elegancko ale nic nie moge wpisać.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: StringGrid - Opcje

Nowy postprzez Cyfrowy Baron » niedziela, 12 września 2010, 11:25

Nie miałem racji, można to zrobić w prosty sposób, tylko trzeba posłużyć się zdarzeniem OnSelectCell.

W Object Inspector ustaw właściwości Options obiektu StringGrid tak:

  • goEditing = false
  • goAlwaysShowEditor = true

Utwórz zdarzenie OnSelectCell dla StringGrid i umieść taki kod:

KOD cpp:     UKRYJ  
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow,  bool &CanSelect)
{
 if(ACol == 2 && ARow == 3)
 {
  StringGrid1->Options = StringGrid1->Options << goEditing;
 }
 else
 {
  StringGrid1->Options = StringGrid1->Options >> goEditing;
 }
}

Zauważ jak zmieniam opcje:

KOD cpp:     UKRYJ  
 StringGrid1->Options = StringGrid1->Options << goEditing;


Nie użyłem TGridOptions() << goEditing; gdyż spowodowałoby to nieprawidłowe wyświetlanie tabeli (nie wiem dlaczego), można więc ewentualnie postąpić tak:

KOD cpp:     UKRYJ  
 TGridOptions gOpt = StringGrid1->Options;
 if(ACol == 2 && ARow == 3)
      StringGrid1->Options = gOpt << goEditing;
 else StringGrid1->Options = gOpt >> goEditing;
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - Opcje

Nowy postprzez Cyfrowy Baron » niedziela, 12 września 2010, 11:31

Można ten mechanizm jeszcze udoskonalić, gdyż w poprzedniej podanej przeze mnie wersji pojawia się problem przy przechodzeniu pomiędzy komórkami za pomocą klawiszy strzałek na klawiaturze. Poniższy kod rozwiązuje ten problem:

KOD cpp:     UKRYJ  
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
        bool &CanSelect)
{
 TGridOptions gOpt = StringGrid1->Options;

 if(ACol == 2 && ARow == 3)
 {
  StringGrid1->Options = gOpt << goAlwaysShowEditor << goEditing;
 }
 else
 {
  StringGrid1->Options = gOpt >> goAlwaysShowEditor >> goEditing;
 }
}



Co się tyczy problemu z edycją pola typu TEdit, to tabela StringGrid nie może być rodzicem pola Edit.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Pitek
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - Opcje

Nowy postprzez Pitek » niedziela, 12 września 2010, 11:37

Bardzo dziękuję rzeczywiście działa!
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron