Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Vykreslovani ve StringGridDrawCell (Delphi)

Zdravím.
Proč mi strinGrid nechce sám překreslovat.
Je třeba něco v properties nastavit?

Když třeba ve StringGrid1DrawCell nechám do buňky vykreslit nějaký obrázek (třeba s ImageList)a spustím to, tak se to zobrazí až když kliknu na řádek,na který to vykreslují.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
A blbne to i v tom default stavu pokud kliknete myši na bunku před a chcete označit vice buněk v 1 ř…
Marek.H 28.06.2013 07:17
Marek.H
Uloz nekam zdrojak at se na to muzeme podivat. Jinak to opravdu nikam nepovede. nový
Jan Fiala 28.06.2013 07:39
Jan Fiala
321923867 nový
Marek.H 28.06.2013 08:09
Marek.H
V D7 uplne bez problemu Zkus ve FormCreate zrusit radek: StringGrid1.DoubleBuffered := True; nový
Jan Fiala 28.06.2013 08:40
Jan Fiala
Počkám ještě zda se ozve pme. Dělám to na XE2 a on je ma. StringGrid1.DoubleBuffered := True je tam… nový
Marek.H 28.06.2013 15:20
Marek.H
Pozrel som ten Tvoj výtvor... Nepochopil som o čo Ti v tom programe ide... Snažíš sa niečoho dosiahn… nový
pme 28.06.2013 19:33
pme
Toto byl jen tak na rychlovku splácaný novy projekt, který nedává žádny smysl, do kterého jsem dal t… nový
Marek.H 29.06.2013 06:06
Marek.H
pro pme Tak jsem dal na Vaše rady. Stahnul a nainstaloval Delphi 7 Vytvořil novy projekt a do něj da… nový
Marek.H 29.06.2013 06:51
Marek.H
Síce netuším prečo si si zvolil TStringGrid... Ale ak Ťa už omrzí sa trápiť s touto "nepodarenou" ko… nový
pme 29.06.2013 11:25
pme
Asi jo ale začali prázdniny, tak to budu muset odložit. Nerad bych je proseděl u PC. Tak teda dík mo… nový
Marek.H 29.06.2013 12:33
Marek.H
Tie komponenty sú do D2007... Bez menšej úpravy to nepôjde, ale dá sa... Takto: docwiki.embarcadero.… nový
pme 29.06.2013 13:58
pme
Děkují moc.Vyzkoušim. poslední
Marek.H 29.06.2013 16:35
Marek.H

Počkám ještě zda se ozve pme.
Dělám to na XE2 a on je ma.

StringGrid1.DoubleBuffered := True je tam schválně.
Když začne vlákno do StringGridu zapisovat, tak StringGrid nepříjemně problikává.

Jinak si nevím rady.
Kdyby vlákno ty výsledky zapisovalo do pomocného sloupce (třeba sloupce 4).
Jak to udělat ve StringGridDrawCell, aby si ten text načetlo se 4 sloupce a uložilo do 3 zarovnaně k pravému okrají.

Pozrel som ten Tvoj výtvor... Nepochopil som o čo Ti v tom programe ide...
Snažíš sa niečoho dosiahnuť a pletieš tam veci, ktoré tam byť nemajú/nemusia.
Načo tam máš vlákno? K čomu? Absolútne zle !!! Takto sa s vláknom nepracuje, ak nevieš ako na to, radšej to vlákno nechaj na iné pokusy...

Stanov si cieľ a potom vymýšľaj, ako sa k nemu dopracovať. Ty možno máš cieľ, ale v jednom projekte si "skúšaš" prácu so StringGridom - nevieš ako sa s ním pracuje...
A navyše tam chceš mať vlákno, ktoré beží dookola neustále - bez zastavenia...]:(

Program si rozlož na malé úlohy:
1. Načítať dáta do bunky
2. Prekresliť bunky podľa nejakého kritéria
3. Zarovnať bunku
atď.

Ty tam chceš mať snáď všetko a jediné čo máš je "myšmaš"...

Ak sa učíš, potom sa uč postupne. Ak už tvoríš niečo zmysluplné - potom tam nepleť vlákno, s ktorým nevieš...

Toto byl jen tak na rychlovku splácaný novy projekt, který nedává žádny smysl, do kterého jsem dal to co mi blbne.

Smysl celého programu je že si do sloupce 1 načte se souboru IP adresy.
Vlákna si na ip adresy pingají a výsledky zapisuje do sloupce 2.
A to vykreslovaní.
Pokud se vrátí pong -1, pc není zaplé a vykresli červenou, při funkčním zelenou.

No budu se muset smiřit s tim že text nebude zarovnan k pravemu okrají.

pro pme
Tak jsem dal na Vaše rady.
Stahnul a nainstaloval Delphi 7
Vytvořil novy projekt a do něj dal jen.

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,1]:='10';
StringGrid1.Cells[1,2]:='20';
StringGrid1.Cells[1,3]:='10';
StringGrid1.Cells[1,4]:='20';
StringGrid1.Cells[1,5]:='10';
StringGrid1.Cells[1,6]:='20';
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
TW, TL:Integer;
begin
if ACol = 1 then
begin
TW := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[ACo l, ARow]);
StringGrid1.Canvas.FillRect(Rect);
TL := Rect.Right - TW - 4;
StringGrid1.Canvas.TextOut(TL, Rect.Top + 4, StringGrid1.Cells[ACol, ARow]);
end;
end;

Vyzkoušel jsem i toto http://stackoverflow.com/questions/4720255/ondrawc ell-center-text-stringgrid-delphi

Vše nadherně funguje.
Pokud to uložím a pak otevřu v XE2 tak je to posmolene.
eeeeejuj.jpg

Síce netuším prečo si si zvolil TStringGrid... Ale ak Ťa už omrzí sa trápiť s touto "nepodarenou" komponentou, potom sa pozri na TListView. ;-)
Ušetríš si veľa námahy a ručného písania kódu s užívateľským vykresľovaním.

TListView má mnoho vlastností, ktoré Ti ušetria čas a námahu:

ViewStyle nastaviť na vsReport, vytvoriť Columns - Aligment, AutoSize, ImageIndex... Všetko si naklikáš... :-)

Asi jo ale začali prázdniny, tak to budu muset odložit.
Nerad bych je proseděl u PC.
Tak teda dík moc za ochotu.

PS:jelikož jsou ty prázdniny, tak ve škole žádnou pomoc nenajdu.
Ještě jsem nikdy neinstaloval v delphi žádné komponenty.
Když mate ty XE2.
Neprozradil by jste zda tam dostanu komponentu TPubStrGrid - TPubSortStrGrid
A jak na to.
http://www.slunecnice.cz/sw/tpubstrgrid-tpubsortst rgrid/
Stahl jsem jí tady delphi

Tie komponenty sú do D2007... Bez menšej úpravy to nepôjde, ale dá sa...
Takto: docwiki.embarcadero.com.

V skratke:
1. Vytvoríš priečinok, kde nakopíruješ súbor s komponentou
2. Otvoríš Delphi a vytvoríš balíček
3. Pridáš unit súbor, v ktorom sa nachádza komponenta
4. Uložíš projekt do adresára, ktorý si vytvoril vyššie
5. Pravý klik na balíček - Compile, Install
6. Ak je potrebné zadáš cestu pre knižnice v nastaveniach Delphi - Library

Zpět do poradny Odpovědět na původní otázku Nahoru