Problém s vykreslováním na Canvas StringGridu – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s vykreslováním na Canvas StringGridu – Delphi – Fórum – Programujte.comProblém s vykreslováním na Canvas StringGridu – Delphi – Fórum – Programujte.com

 

Navara
~ Anonymní uživatel
68 příspěvků
16. 3. 2013   #1
-
0
-

Zdravím,

prosím o radu, mám následující problém:

Vytvářím aplikaci s názvem Elektronický dopravní deník, která spočívá v evidenci časových údajů do tabulky, tedy stringgridu. Aby to nebyla jenom neupravená a nepřehledná mřížka, jsou některé řádky nebo sloupce podle jistých pravidel odděleny tenkou nebo tlustší linkou, což je prováděno v proceduře OnDrawCell pomocí MoveTo(x,y) a LineTo(x+délka buňky, y).

Dokud je ve StringGridu tolik řádek nebo sloupců že se mřížka vejde do rámce objektu (není potřeba ScrollBar), vykreslování probíhá v pořádku. Problém nastave ve chvíli, kdy počet řádků či sloupců přesáhne rámec objektu, aktivuje se posuvník a vykreslování začne dělat rotiku. Buďto nevykresluje ohraničení vůbec, nebo ho vykresluje úplně mimo, doprostřed buněk, nebo třeba jenom částečně... nevím si rady jak toto vyřešit, vykreslování "postavit do latě" i když je tabulka větší a je potřeba hýbat scrollbarem.

Díky.

Jenom poznámka u StringGridu je použito DoubleBuffered=True, abych předešel problikávání tabulky při překreslení; nevím zda by to s tím nemohlo mít něco společného.

Nahlásit jako SPAM
IP: 83.208.134.–
zlz
~ Anonymní uživatel
634 příspěvků
16. 3. 2013   #2
-
0
-

To x a y bereš z toho Rectu, co dostáváš jako parametr OnDrawCell ?

Nahlásit jako SPAM
IP: 78.156.159.–
Navara
~ Anonymní uživatel
68 příspěvků
16. 3. 2013   #3
-
0
-

#2 zlz
Chtěl jsem sem tu proceduru vložit, ale úspěšně jsem ji smazal. Pokusím se to popsat jak to tam bylo:

var i, DelkaShora, DelkaZleva: Integer;
begin
 i:=0; 
 for i = 0 to ARow-1
 do DelkaShora := DelkaShora + TableEDD.RowHeights[i];
 
 i := 0;
 for i := 0 to ACol-1 
 do DelkaZleva := DelkaZleva + TableEDD.ColWidth[i];

 TableEDD.Canvas.MoveTo(DelkaShora, DelkaZleva);
 TableEDD.Canvas.LineTo(DelkaShora, DelkaZleva + TableEDD.ColWidths(ACol));
end; 
Nahlásit jako SPAM
IP: 83.208.134.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý