CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - StringGrid - częściowa edycja komórek

StringGrid - częściowa edycja komórek

dział ogólny

Re: StringGrid - częściowa edycja komórek

Nowy postprzez oneiro » czwartek, 7 lutego 2013, 12:51

Dziękuję Wam za uwagi, ale skorzystałem z rady Barona, dopisanie.

KOD cpp:     UKRYJ  
     myPanel->Visible = false;
 


załatwiło sprawę, jest super.

PS. Będąc przy StringGridzie - dlaczego, jeśli podczas pracy zamienię wymiar StringGrida (np. z 8 wierszy zmienię na 48 wierszy) komórki zafiksowane (stałe) znikają? Radzę sobie poprzez nadanie szarego koloru, ale wraz z przewijaniem komórek, jeśli jest ich więcej niż pole potrafi wyświetlić, nagłówki znikają, tj przesuwają się (czyli komórki z Col=0).
Nie jest to uciążliwe, ale wygląda efektywnie.
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Cyfrowy Baron » czwartek, 7 lutego 2013, 13:33

Nie powinno się tak dziać. Pewnie znów masz coś w kodzie, co daje taki efekt. Możesz w kodzie wywołać dodawanie tych nagłówków:

KOD cpp:     UKRYJ  
StringGrid3->FixedCol = 1;
StringGrid3->FixedRows = 1;
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 - częściowa edycja komórek

Nowy postprzez oneiro » piątek, 8 lutego 2013, 19:50

Wrócę jeszcze je ComboBox'ów - jak odczytać aktualnie wybraną pozycję?

KOD cpp:     UKRYJ  
 Lista = new TStringList;
 Lista->Add("=");
 Lista->Add("<");
 Lista->Add("<=");
 Lista->Add(">");
 Lista->Add(">=");
 


Mam 5 pozycji do wyboru. Wykorzystałem kod z porady dotyczącej StringGridów i ComboBox'ów. Wszytko ładnie chodzi, potrafię odtworzyć zapisane wcześniej wartości (tj. przepisanie z tablicy tab_opt_sign_L i tab_opt_sing_P) za pomocą poniższego kodu:
KOD cpp:     UKRYJ  
for (unsigned i=0; i<9; i++)
  {
    Form1->myEditor->Items = Form1->Lista;

    Form1->StringGrid3->Cells[1][i+1] = Form1->myEditor->Items->Strings[Param.tab_opt_sign_L[i]];
    Form1->StringGrid3->Cells[3][i+1] = Form1->myEditor->Items->Strings[Param.tab_opt_sign_P[i]];

    Form1->MoveEditor();
    Form1->myPanel->Visible = false;
  }
 


A jak zrobić w 2-gą stronę, tj zapisać aktualnie wybraną pozycję w ComboBox'ie? Oczywiście mogę po prostu odczytać wartość komórki StringGrida i odczytaną wartość dopasować do mojej listy , ale na pewno da się to powiązać z wartości Lista->Stringa[i], gdzie "i" to wybrana pozycja.
Chodzi mi o to, że chcę zapisać nr pozycji listy, a nie wartość. I w dodatku wiedzieć, jaka to komórka w StringGridzie.
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Mironas » piątek, 8 lutego 2013, 19:56

int pozcja = lista->IndexOf("<=");
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: StringGrid - częściowa edycja komórek

Nowy postprzez oneiro » piątek, 8 lutego 2013, 20:36

:) dobre, ale mimo wszystko, czy da się inaczej, np. podczas wybieranie pozycji "<=" od razu zapisze mi dodatkowo gdzieś (np. w jednej z moich tablic) korzystając z dynamicznych elementów, które odpowiedzialne są za działanie ComboBoxów w StringGridzie (pozwoli mi to lepiej zrozumieć działanie całego mechanizmu).
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Cyfrowy Baron » sobota, 9 lutego 2013, 00:59

oneiro napisał(a):podczas wybieranie pozycji "<=" od razu zapisze mi dodatkowo gdzieś (np. w jednej z moich tablic) korzystając z dynamicznych elementów


Napisz to w jakiś zrozumiały sposób, bo nie rozumiem o co Tobie właściwie chodzi.
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 - częściowa edycja komórek

Nowy postprzez oneiro » sobota, 9 lutego 2013, 01:41

chciałbym skorzystać np. funkcji

KOD cpp:     UKRYJ  
myEditor->ItemIndex;
 


ale nie wiem jak, bo jak spróbuje wywołać powyższe dla elementu StringGrid dla zdarzenia OnClick lub OnMouseUp/Down, to nie zadziała (wartość -1), bo kliknięcie powoduje rozwinięcie listy i drugie kliknięcie powoduje wybór. A chcę zapisać zamianę "w locie" do swojej zmiennej tj. w trakcie zmiany od razu zapisać wybraną pozycję (tj pozycję StringLista). Tylko, że nie wiem jak.

Na razie mam zaimplementowaną metodę @Mironasa i zorganizowałem to tak, że przed odczytaniem znaków "przelatuję" obie kolumny ze znakami i zapisuję to do wewnętrznej zmiennej i dokonuję obliczeń (a być może uda się, bez tej dodatkowej zmiennej i co ważniejsze, ciekawi mnie jak to zrobić).
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Cyfrowy Baron » sobota, 9 lutego 2013, 10:02

Metoda ItemIndex zwraca tylko wybrany numer elementu listy. Zadziała dopiero gdy element listy zostanie wybrany, a nie jest wybierany, by jednak zadziałał na liście musi być wybrany jakiś element, w przeciwnym razie ItemIndex = -1. Możesz więc zapisać wartość wybraną na liście "w locie", ale musisz w tym celu dołączyć do obiektu myEditor zdarzenie OnSelect i zapisywać "w locie", ale właśnie w tym zdarzeniu.
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 - częściowa edycja komórek

Nowy postprzez Mironas » sobota, 9 lutego 2013, 13:05

Ja już pogubiłem się w temacie i nie wiem co aktualnie jest problemem.
Może spróbuj uprościć pytanie do minimum i dokładnie napisz co robisz i co chcesz uzyskać.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Cyfrowy Baron » sobota, 9 lutego 2013, 13:47

Z tego co się zorientowałem to on chce pobrać coś z listy ComboBox będącej elementem tabeli i od razu po wybraniu tego z listy, gdzieś to przepisać.
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 - częściowa edycja komórek

Nowy postprzez Mironas » sobota, 9 lutego 2013, 14:09

To pewnie zbyt banalne ale może podpiąć do ComboBox-a zdarzenie OnChange ?
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Cyfrowy Baron » sobota, 9 lutego 2013, 14:52

Ja sugerowałem zdarzenie OnSelect.
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 - częściowa edycja komórek

Nowy postprzez oneiro » sobota, 9 lutego 2013, 16:21

Dla Was to banał, ale ja sobie nie radzę. Chcę pobrać w czasie wyboru ComboBox'a wybraną pozycję i przypisać jaj do swojej zmiennej.

Z tego co się orientuję, zdarzenia OnChange oraz OnSelect StringGrid nie posiada, czyli muszę wpisać to w zdarzeniu dla ComboBox'a. I tu pojawia się (dla mnie) trudność - jak to zrobić, po lewej stronie nie mam Object Inspectora, bo jest to obiekt tworzony dynamicznie.
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Mironas » sobota, 9 lutego 2013, 16:37

Aby utworzyć sobie zdarzenie OnSelect albo OnChange postaw sobie na formie ChangeBox-a i w ObiectInspector utwórz dla niego to zdarzenie (przykładowa nazwa ComboBox1OnSelect). Potem możesz usunąć ChangeBox-a a zdarzenie zostanie.

UWAGA - jeśli nie wpiszesz nic do zdarzenia to podczas kompilacji zostanie usunięte.

Następnie podczas tworzenia dynamicznie ChangeBox-ów podpinasz im to zdarzenie:
KOD cpp:     UKRYJ  
  nowychangebox->OnSelect = ComboBox1OnSelect;
 
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: StringGrid - częściowa edycja komórek

Nowy postprzez Cyfrowy Baron » sobota, 9 lutego 2013, 18:13

oneiro napisał(a):Z tego co się orientuję, zdarzenia OnChange oraz OnSelect StringGrid nie posiada


Nie posiada i nie musi. Masz utworzyć zdarzenie OnChange dla obiektu typu TComboBox, czyli myEditor. Zauważ, że w poradzie z której korzystałeś to zdarzenie jest podłączane do obiektu myEditor, więc masz już gotowy kod. Teraz kod z pomocą którego chcesz coś pobrać z czegoś i gdzieś umieścić, wstawiasz właśnie w to zdarzenie:

KOD cpp:     UKRYJ  
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 /* ... */

 myEditor = new TComboBox(myPanel->Handle);

 /* ... */

 myEditor->OnChange = myEditorChange; // tutaj podłączasz zdarzenie

}


nie zapomnij o deklaracji w pliku nagłówkowym:

Plik nagłówkowy np. Unit1.h
KOD cpp:     UKRYJ  
private:
        void __fastcall myEditorChange(TObject *Sender);


tutaj masz definicję tego zdarzenia:

Plik źródłowy np. Unit1.cpp
KOD cpp:     UKRYJ  
void __fastcall TForm1::myEditorChange(TObject *Sender)
{
 /* jakiś Twój kod, niekoniecznie ten co niżej */

 StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = myEditor->Items->Strings[myEditor->ItemIndex]; /* tutaj pobierane są dane z zaznaczonego elementu listy do wybranej komórki tabeli */

 myPanel->Visible = false;
}
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

Poprzednia stronaNastępna strona

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 23 gości

cron