StringGrind - kolor linii

dział ogólny

StringGrind - kolor linii

Nowy postprzez shycat » poniedziaÅ‚ek, 15 czerwca 2009, 17:13

Witam, uzywam komponentu StringGrind, "kolorystyka" programu jest raczej ciemna i chcialabym, aby komponent "pasowal" do koloru reszty... ale nie moge zmienic koloru linii, zostaja one caly czas biale... screen przesylam w zalaczniku do postu. Jak zmienic kolory tych linii?
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
shycat
Homos antropiczny
Homos antropiczny
 
Posty: 51
Dołączył(a): środa, 20 sierpnia 2008, 12:37
Lokalizacja: ÅšlÄ…sk
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 7
Kompilator: C++ Builder 2006, Delphi 7
Gadu Gadu: 26712716
    NieznanyNieznana

Re: StringGrind - kolor linii

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 15 czerwca 2009, 17:27

Niestety standardowy komponent StringGrid nie udostępnia metod umożłiwiajacych zmianę koloru linii. możesz je co najwyżej całkowicie usunąć, czyli będą ale niewidoczne.
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
    NieznanyNieznana

Re: StringGrind - kolor linii

Nowy postprzez shycat » poniedziaÅ‚ek, 15 czerwca 2009, 17:39

Chyba nie bede miala wyboru, dzieki Cyfrowy Baronie :)
Avatar użytkownika
shycat
Homos antropiczny
Homos antropiczny
 
Posty: 51
Dołączył(a): środa, 20 sierpnia 2008, 12:37
Lokalizacja: ÅšlÄ…sk
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 7
Kompilator: C++ Builder 2006, Delphi 7
Gadu Gadu: 26712716
    NieznanyNieznana

Re: StringGrind - kolor linii

Nowy postprzez Miroo_007 » czwartek, 18 czerwca 2009, 01:34

Można to obejść rysując ręcznie linię. Pokażę to na przykładzie:
Kod: Zaznacz cały
void TForm1::StringGrid1DrawCell(...) {
    for(int i=0, int x=0, int y=0; i < StringGrid1->RowCount; i++, y+=StringGrid1->RowWidth[i]) {
          StringGrid1->Canvas->Pen->Width = 3;
          StringGrid1->Canvas->Pen->Color = clBlack;
          StringGrid1->Canvas->MoveTo(x, y+1);
          StringGrid1->Canvas->LineTo(StringGrid1->Width, y+1);
    }
}

Rysowanie pionowych lini należy wykonać analogicznie.Aby zapobiec migotaniu grida należy przy tworzeniu formularza wpisać:
Kod: Zaznacz cały
StringGrid1->DoubleBuffered = true;


P.S. Nie wiem czy kod zadziała bo nie jestem wstanie teraz tego sprawdzić, tzn. kod pisany na kartce papieru.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: StringGrind - kolor linii

Nowy postprzez Cyfrowy Baron » czwartek, 18 czerwca 2009, 12:35

Umieszczanie pętli w zdarzeniu OnDrawCell jest najgorszym z możliwych rozwiązań, obiekt będzie "migał", a przy dużej liczbie komórek po prostu będzie się zacinał.
Zauważ że to zdarzenie zawiera jako argument klasę TRect zwracającą pozycję i wymiary każdej komórki, więc tym należy się posłużyć:

Kod: Zaznacz cały
void __fastcall TViewForm::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
StringGrid1->Canvas->Pen->Color = clRed;
StringGrid1->Canvas->Pen->Width = 1;

StringGrid1->Canvas->MoveTo(Rect.left - 1, Rect.top);
StringGrid1->Canvas->LineTo(Rect.left - 1, Rect.bottom - 1);


StringGrid1->Canvas->MoveTo(Rect.left - 1, Rect.bottom - 1);
StringGrid1->Canvas->LineTo(Rect.right, Rect.bottom - 1);
}
//---------------------------------------------------------------------------


Ten kod można oczywiście udoskonalić i posłużyć się np. zamiast funkcjami MoveTo LineTo jedna funkcją Rectangle. Pamiętać należy jednak o jednym odrysowywanie odbywa się wewnątrz komórek a nie na ich krawędzi, więc trzeba wyłączyć wyświetlanie linii.

Nigdy nie umieszczaj pętli wewnątrz zdarzenia OnDrawCell jeżeli nie jest to absolutnie niezbędne.
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
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

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ść