Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kontrola MSHFlexGrid?

[es] :: Visual Basic 6 :: Kontrola MSHFlexGrid?

Strane: 1 2

[ Pregleda: 4662 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

KiselinaXP
Crna rupa

Član broj: 54030
Poruke: 232
*.teol.net.

Jabber: kiselina@elitesecurity.org
ICQ: 226466859


Profil

icon Kontrola MSHFlexGrid?01.06.2007. u 15:29 - pre 205 meseci
Zanima me kako, kada ucitam podatke iz baze u MSHFlexGrid da mi polja budu obojena, ali prvo polje plava drugo bela i sve tako. Nadam se da ste skontali na sta mislim???
Hvala unapred!
A gde je moj moped ko da je u moravu propo!
Pero kojot genije!
 
Odgovor na temu

zormar

Član broj: 129240
Poruke: 176
*.adsl-1.sezampro.yu.



Profil

icon Re: Kontrola MSHFlexGrid?01.06.2007. u 21:33 - pre 205 meseci
Ovo ti je kod za bojenje opsega, ti prilagodi za ono sto tebi treba
Code:
for i=1 to 5 ' redovi
            for j= 1 to 5 'kolone
               MSHFG1.row=i
               MSHFG1.col=j
               MSFHG1.cellbackcolor=blue
            next j
         next i

pozdrav
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Kontrola MSHFlexGrid?01.06.2007. u 22:37 - pre 205 meseci
Moze i ovako.

Code:

Private Sub Form_Load()
    MSHFlexGrid1.Rows = 10
    MSHFlexGrid1.Cols = 10
    For r = 1 To MSHFlexGrid1.Rows - 1
        For k = 1 To MSHFlexGrid1.Cols - 1
            MSHFlexGrid1.Row = r
            MSHFlexGrid1.Col = k
            MSHFlexGrid1.CellBackColor = QBColor(r)
        Next k
    Next r
End Sub

rgdrajko
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: Kontrola MSHFlexGrid?01.06.2007. u 23:58 - pre 205 meseci
Posto je @rgdrajko dao netacan odgovor sad moram ja.
@rgdrajko sta bi bilo sa tim tvojim kodom da grid ima 20 rovova ili vise?

@KiselinaXP ako pod "polje" podrazumijevas Row grida onda mislim da si ovo trazio.
Code:
Private Sub Form_Load()
Dim lRow As Long
Dim lCol As Long

    MSHFlexGrid1.Rows = 50
    MSHFlexGrid1.Cols = 10
    
    For lRow = 1 To MSHFlexGrid1.Rows - 1 Step 2
        For lCol = 0 To MSHFlexGrid1.Cols - 1
            MSHFlexGrid1.Row = lRow
            MSHFlexGrid1.Col = lCol
            MSHFlexGrid1.CellBackColor = &H80000013
        Next lCol
    Next lRow
    
End Sub
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 00:57 - pre 205 meseci
@ Ero S Ovoga Sveta
Hvala na ispravci. Ono je bio primer na brzinu. A sta bi bilo sa mojim kodom da grid ima 20 rovova ili vise? Pa ukupan broj redova i kolona definises sa Rows i Cols, valjda znas to i trebalo je samo to promeniti i umesto 10 staviti npr. 50.
Posto ni ti nisi dao potpuno tacan odgovor moram ja. Valjda covek misli od pocetka do kraja da se naizmenicno smenjuju plava i bela polja i postoje dva moguca resenja:

1. Ako pod polja podrazumeva redove onda je resenje(slicno tvome, stim sto je kod tebe prva celija u redu siva a ne plava tj. bela):

Code:

Private Sub Form_Load()
    MSHFlexGrid1.Rows = 50
    MSHFlexGrid1.Cols = 50
    For r = 0 To MSHFlexGrid1.Rows - 1
        For k = 0 To MSHFlexGrid1.Cols - 1
            MSHFlexGrid1.Row = r
            MSHFlexGrid1.Col = k
            If r Mod 2 = 0 Then
                MSHFlexGrid1.CellBackColor = QBColor(9)
                Else
                MSHFlexGrid1.CellBackColor = QBColor(15)
            End If
        Next k
    Next r
End Sub


2. Ako pod polja podrazumeva celije onda je resenje:

Code:

Private Sub Form_Load()
    MSHFlexGrid1.Rows = 50
    MSHFlexGrid1.Cols = 50
    For r = 0 To MSHFlexGrid1.Rows - 1
        For k = 0 To MSHFlexGrid1.Cols - 1
            MSHFlexGrid1.Row = r
            MSHFlexGrid1.Col = k
            If k Mod 2 = 0 Then
                MSHFlexGrid1.CellBackColor = QBColor(9)
                Else
                MSHFlexGrid1.CellBackColor = QBColor(15)
            End If
        Next k
    Next r
End Sub

rgdrajko
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 01:47 - pre 205 meseci
@rgdrajko
Citat:
A sta bi bilo sa mojim kodom da grid ima 20 rovova ili vise?

Evo sta bi bilo: Posto u QBColor imas, mislim 16 boja, posle 16. reda program bi zakovao.

A sto se tice koda boje koju sam stavio bar je to lako promijeniti.
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 11:27 - pre 205 meseci
@ Ero S Ovoga Sveta
Ok. Ono je bio primer na brzinu sa funkcijom QBCOLOR i radi to sto radi i u tom okviru. Uobicajena je praksa pri programiranju na brzinu da se sa bojama radi sa funkcijom QBCOLOR(koja je nasledjena iz Qbasica-a) a inace sa funkcijom RGB koja ima vrednost long i ako umesto funkcije QBCOLOR u moj gornji program ubacis funkciju RGB dobijas ispravan program. Uostalom to ti sve znas i ovo pisem zbog pocetnika. Umesto heksadecimalnih vrednosti boja funkcije RGB za pocetnika je bolje da radi sa funkcijom RGB i tek kada je 100% siguran da je to ta boja onda moze staviti njenu heksadecimalnu vrednost. Uostalom mnogo lakse je promeniti tri parametra red, green, blue od 0 do 255 RGB funkcije nego pamtiti heksadecimalne vrednosti. Uostalom sve ovo se moze procitati kada misom stanete na RGB funkciju i pritisnete F1 taster.
Primer:

Code:

Private Sub Form_Load()
    MSHFlexGrid1.Rows = 50
    MSHFlexGrid1.Cols = 50
    For r = 0 To MSHFlexGrid1.Rows - 1
        For k = 0 To MSHFlexGrid1.Cols - 1
            MSHFlexGrid1.Row = r
            MSHFlexGrid1.Col = k
            If r Mod 2 = 0 Then
                MSHFlexGrid1.CellBackColor = RGB(0, 0, 255)
                Else
                MSHFlexGrid1.CellBackColor = RGB(255, 255, 255)
            End If
        Next k
    Next r
End Sub

rgdrajko
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 17:14 - pre 205 meseci
Dok me nisu skinuli sa foruma moram da odgovorim
@rgdrajku:
Lijepo je sto pokusavas pomoci ljudima da rijese problem, ali je problem u tome
sto ti u velikom broju slucajeva dajes pogresna rjesenja iako je prije tebe neko dao ispravno rjesenje,
sto me je i u ovom slucaju natjeralo da se ukljucim u diskusiju.
Evo dokazi zato:
U prvoj poruci koju je postavio @zormar sasvim je lijepo objasnjen princip izmjene boja na gridu
sto se uz malu doradu moglo prilagoditi zahtjevima Osnivaca teme.
Onda ti dajes POGRESNO rjesenje nakon cega sam ja reagovao i postovao svoj code.
U tvom drugom postu ti ponovo postavljas code kokji takodje nije uredu a evo i zasto.
U dvije komplikovane petlje ubacujes komplikovanije rjesenje od onoga koje sam ja postavio,
cime ogromno usporavas izvrsenje zadatka. Probaj da u onaj svoj kod postavis da grid ima
1000 Row-ova ili nedaj Boze vise, pokreni program i reci nam svima sta se desilo, a uradi
to isto i sa primjerom koji sam ja postavio. Desice se to da programu za izvrsenje
tvoga koda sa 1000 Row-ova treba skoro tri puta vise vremena(oko 3 sekunde) nego za moj kod.
A posto se tu radio o sekundama zamisli sta bi bilo da grid ima 10.000 Row-ova ili vise.
(ova gore vremena su relativna u zavisnosti od brzine procesora i ostalih faktora)
I moje rjesenje se sa malim izmjenama jos moze ubrzati i evo kod kako to uraditi.
Code:
Private Sub Form_Load()
Dim lCol As Long
Dim lRow As Long

Const Plava = &HFFF8EA

    With MSHFlexGrid1
        .Rows = 1000
        .Cols = 10

        For lRow = 0 To .Rows - 1 Step 2
            .Row = lRow
            For lCol = 0 To .Cols - 1
                .Col = lCol
                .CellBackColor = Plava
            Next lCol
        Next lRow
    End With
        
End Sub

Ako neko ima neko brze i bolje rjesenje bilo bi korisno da ga da.
A moj savjet je da se ova izmjena boja uopste ne radi ako nije nuzna ili ako se ne zna moguci
broj Row-ova Grida.
 
Odgovor na temu

zormar

Član broj: 129240
Poruke: 176
*.adsl-1.sezampro.yu.



Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 18:32 - pre 205 meseci
Da iskoristim priliku kad je ova tema vec otvorena.
Zasto ova petlja ne radi?
Prijavljuje Run-Time error 13 : Type mismatch - u prvom redu gde je definisana petlja.
Code:
Do While Not .TextMatrix(i, j) = 1
   For j = 1 To MSHFlexGrid1.Cols - 1  
        For i = 1 To MSHFlexGrid1.Rows - 1
            If .TextMatrix(i, j) = "" Then   
               .Row = i
               .Col = j
               .CellBackColor = vbGreen
           ElseIf .TextMatrix(i, j) = 1 Then   
               .Row = i
               .Col = j
               .CellBackColor = vbRed
           End If
        Next
   Next
Loop

U Gridu su upisane jedinice u svakoj koloni na razlicitim mestima.
Trebalo bi obojiti zeleno sva polja u svakoj koloni, dok na nenaidje na jedinicu, to polje se boji u crveno.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:07 - pre 205 meseci
Ne treba ti Do...While petlja (osim ako ne zelis da izadjes cim naidjes na prvu jedinicu), a brojaci (i, j) treba da idu od 0, a ne od 1 (osim ako imas Fixed rows ili columns, gde onda treba da se oni preskoce):
Code:

    With MSHFlexGrid1

        For j = 0 To .Cols - 1  
            For i = 0 To .Rows - 1

                If .TextMatrix(i, j) = "" Then   
                   .Row = i
                   .Col = j
                   .CellBackColor = vbGreen
                ElseIf .TextMatrix(i, j) = "1" Then   
                   .Row = i
                   .Col = j
                   .CellBackColor = vbRed
                End If

            Next
        Next

    End With
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:10 - pre 205 meseci
Posto ne znam sta tacno zelis evo ispravke na brzinu, a ti posle ispravi sta jos treba. Do While petlja bi trebala biti unutar "For i" petlje da bi se izvrsavala.

Code:

Private Sub Form_Load()
     MSHFlexGrid1.Rows = 20
     MSHFlexGrid1.Cols = 20
    
     For j = 1 To MSHFlexGrid1.Cols - 1
            For i = 1 To MSHFlexGrid1.Rows - 1
                If MSHFlexGrid1.TextMatrix(i, j) = "" Then
                   MSHFlexGrid1.Row = i
                   MSHFlexGrid1.Col = j
                   MSHFlexGrid1.CellBackColor = vbGreen
                   Else
                        If MSHFlexGrid1.TextMatrix(i, j) = 1 Then
                            MSHFlexGrid1.Row = i
                            MSHFlexGrid1.Col = j
                            MSHFlexGrid1.CellBackColor = vbRed
                        End If
                End If
            Next i
       Next j
End Sub

rgdrajko
 
Odgovor na temu

zormar

Član broj: 129240
Poruke: 176
*.adsl-1.sezampro.yu.



Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:18 - pre 205 meseci
Gorane, upravo je potrebno da izadje iz petlje cim naidje na prvu jedinicu u svakoj koloni.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:20 - pre 205 meseci
Pa onda ce ti ostale celije (one kroz koje nije prosla petlja) ostati u beloj boji, tj. boji koja je bila pre poziva petlje, da li tako hoces?
 
Odgovor na temu

zormar

Član broj: 129240
Poruke: 176
*.adsl-1.sezampro.yu.



Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:22 - pre 205 meseci
Da, tako treba.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:26 - pre 205 meseci
Pa dobro, svakako ti ta Do...While petlja nije potrebna i nema smisla, evo ti resenje:
Code:

Private Sub ObojiGrid()
   
   With MSHFlexGrid1
        
      For j = 0 To .Cols - 1
         For i = 0 To .Rows - 1

            If .TextMatrix(i, j) = "" Then
                
               .Row = i
               .Col = j
               .CellBackColor = vbGreen
                   
            ElseIf .TextMatrix(i, j) = "1" Then
                
               .Row = i
               .Col = j
               .CellBackColor = vbRed
               
               Exit Sub 'izlaz iz procedure
                   
            End If

         Next
      Next

    End With
    
End Sub
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:29 - pre 205 meseci
Sad sam video da hoces prekid punjenja redova po koloni kad naidje na "1", evo ti malo u skladu sa tim:
Code:

Private Sub ObojiGrid()
   
   With MSHFlexGrid1

      For j = 0 To .Cols - 1
         For i = 0 To .Rows - 1

            If .TextMatrix(i, j) = "" Then
                
               .Row = i
               .Col = j
               .CellBackColor = vbGreen
                   
            ElseIf .TextMatrix(i, j) = "1" Then
                
               .Row = i
               .Col = j
               .CellBackColor = vbRed
               
               Exit For 'izlaz iz punjenja redova po koloni
                   
            End If

         Next
      Next

    End With
    
End Sub
 
Odgovor na temu

zormar

Član broj: 129240
Poruke: 176
*.adsl-1.sezampro.yu.



Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:38 - pre 205 meseci
Ovo funkcionise samo za prvu kolonu, a potrebno je za sve kolone u Gridu. Mislim da je zbog toga potrebna petlja.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:39 - pre 205 meseci
Dobio si ispravku, pogledaj Petlja je suvisna!
 
Odgovor na temu

zormar

Član broj: 129240
Poruke: 176
*.adsl-1.sezampro.yu.



Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:42 - pre 205 meseci
Gorane, ovo sad je u redu. Sve radi kako treba.
Hvala
 
Odgovor na temu

Marko_L
Beograd

Član broj: 20532
Poruke: 2885
89.216.220.*

Jabber: Marko_L@elitesecurity.org


+828 Profil

icon Re: Kontrola MSHFlexGrid?02.06.2007. u 19:47 - pre 205 meseci
Ajde pročitajte pažljivo pitanje pre nego što napišete odgovor. U prvom postu je jasno naglašeno da se podaci učitavaju iz baze, tako da je broj redova i kolona već definisan i ne treba ga ponovo definisati. Drugo, nije pametno ovakve stvari stavljati u Load event forme, jer prvo, ne znamo tačno kada će Grid biti povezan sa bazom, a drugo kada dođe do refresha prikaza, boje će se izgubiti. Bolje je napraviti proceduru koja radi bojenje i onda je pozvati kad god je potrebno. Dakle, isto kao ovo poslednje Erino rešenje, samo bez ponovnog definisanja redova i kolona
Code:
Dim i As Long
Dim j As Long
With MSHFlexGrid1
   For i = 1 To .Rows - 1 Step 2
   .Row = i
      For j = 1 To .Cols - 1
      .Col = j
      .CellBackColor = RGB(0, 0, 200)
      Next j
   Next i
End With


@zomar
Prijavljuje ti grešku zato što je TextMatrix String Tipa, a ti radiš sa numeričkom vrednošću. To možeš da izbegneš na dva načina, prvi je da staviš 1 pod navodnike, a drugi da tražiš brojčanu vrednost TextMatrix-a sa cLng ili Val, recimo Val(.TextMatrix(i, j) Mada, bez obzira na to, tvoj kod neće raditi kako treba, jer nisi dobro postavio uslov, odnosno definišeš uslov za petlju sa određenom ćelijom od koje počinješ, a sledeći put proveravaš uslov sa poslednjom ćelijom (poslednji red i poslednja kolona), jer si odmah po prvom izvršavanju Do... Loop petlje i i j "bacio" na maksimalnu vrednost. Takođe, nisi dobro objasnio šta želiš da postigneš. Ako hoćeš da sva polja koja sadrže 1 obojiš u crveno, a sva ostala u zeleno, ne treba ti ta Do... Loop petlja uopšte, možeš jednostavno ovako
Code:
Dim i As Long
Dim j As Long
With MSHFlexGrid1
   For j = 1 To MSHFlexGrid1.Cols - 1
        For i = 1 To MSHFlexGrid1.Rows - 1
            If .TextMatrix(i, j) = "1" Then
               .Row = i
               .Col = j
               .CellBackColor = vbRed
           Else
               .Row = i
               .Col = j
               .CellBackColor = vbGreen
           End If
        Next i
   Next j
End With

a ako ti je cilj da bojiš kolonu zelenom sve dok ne naiđe na 1, a onda pređe na sledeću onda jednostavno napusti petlju čim nađeš 1. Ovako
Code:
Dim i As Long
Dim j As Long
Dim provera As Boolean
With MSHFlexGrid1
   For j = 1 To MSHFlexGrid1.Cols - 1
        For i = 1 To MSHFlexGrid1.Rows - 1
            If .TextMatrix(i, j) = "1" Then
               .Row = i
               .Col = j
               .CellBackColor = vbRed
                Exit For
           Else
               .Row = i
               .Col = j
               .CellBackColor = vbGreen
           End If
        Next i
   Next j
End With

Ako hoćeš nešto treće, onda objasni šta.
-Odracuonogakomijedrpiorazmaknicu.
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
 
Odgovor na temu

[es] :: Visual Basic 6 :: Kontrola MSHFlexGrid?

Strane: 1 2

[ Pregleda: 4662 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.