Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok NapísalOffline : 15.11.2009 17:04

zrejme low ale ako dosiahnem zavolanie tejto procedury napr. pri button onclick?

Kód:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  if Index = 2 then
    begin
    (Control as TListbox).Canvas.Brush.Color := clWhite;
    (Control as TListbox).Canvas.Font.Color := clBlack;
    end
  else
    begin
    (Control as TListbox).Canvas.Brush.Color := clBlack;
    (Control as TListbox).Canvas.Font.Color := clWhite;
    end;
  (Control as TListbox).Canvas.FillRect(Rect);
  (Control as TListbox).Canvas.TextOut(Rect.Left+2,Rect.Top+2,
                        (Control as TListbox).Items[Index]);
end;


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] farebny text v listbox

Registrovaný: 11.01.09
Prihlásený: 29.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 15.11.2009 21:50

Pochopil som správne, aby sa po stlačení buttonu vykreslil ListBox (teda zavolala vykresľovacia procedúra) ?
Ak áno, dá sa to takto, ale podľa mňa to je trocha neprofesionálne, keďže hneď po kliknutí na iné miesto, sa ListBox zobrazí ako predtým:

Kód:
procedure TForm1.FormCreate(Sender: TObject);
begin

  ListBox1.Style:= lbOwnerDrawFixed;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  ListBox1DrawItem(ListBox1, ListBox1.ItemIndex, ListBox1.ItemRect(ListBox1.ItemIndex), [odFocused]);

end;

Na forme je jeden ListBox, jeden Button a procedúra ListBox1DrawItem v mojom kóde je hore uvedená procedúra.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 16.11.2009 1:13

No asi som to zle zadefinoval. Chcel by som to tak ze mam listbox (naplni sa pri behu programu) a teraz ked kliknem na button1 tak sa tretia polozka sfarbi na cerveno (iba text nie pozadie), pricom to zostane tak. Cize pri kliku na listbox sa to nezmeni. V podstate chcem vysviecovat a zhasinat urcite zaznamy pri urcitej akcii.


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] farebny text v listbox

Registrovaný: 11.01.09
Prihlásený: 29.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 16.11.2009 13:20

OK, ešte jedna otázka: Keďže po kliku na button má ostať ListBox nezmenený, čo sa farieb týka, z toho mi vyplýva, že buď sa na ten button počas programu môže kliknúť iba raz (tzn od kliknutia na button sa začne ListBox vyfarbovať podľa potrieb až do ukončenia programu) alebo sú buttony dva, pričom jeden zapína vykresľovanie ListBoxu a druhý ho vypína.
Prvý spôsob by vezeral takto:

Kód:
var access: boolean = false;

// ...

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin

  (Control as TListbox).Canvas.Brush.Color := clWhite;
  (Control as TListbox).Canvas.Font.Color := clBlack;

  if (access) then begin

    if ( (State = [odFocused, odSelected]) or (State = [odSelected]) or (State = [odFocused])) then
        (Control as TListbox).Canvas.Font.Color:= clRed
    else
        (Control as TListbox).Canvas.Font.Color:= clBlack;

  end;

  (Control as TListbox).Canvas.FillRect(Rect);
  (Control as TListbox).Canvas.TextOut(Rect.Left+2,Rect.Top, (Control as TListbox).Items[Index]);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.Style:= lbOwnerDrawFixed;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  access:= true;
  ListBox1DrawItem(ListBox1, ListBox1.ItemIndex, ListBox1.ItemRect(ListBox1.ItemIndex), [odSelected]);
end;


(* V ObjectInspectore treba vybrať pre ListBox udalosť onDrawItem a pastnuť tam tento kód a tak isto aj pre OnCreate a OnClick, pretože len skopíraovním tohto kódu do editora to nepôjde, keďže nie sú procedúry priradené udalostiam komponentov - píšem to, pretože niektorí uživatelia píšu, že im kód nefunguje, lebo ich iba surovo skopírovali a vložili bez priradenia *)

Text bude po stlačení buttonu sfarbený do červena (aj po odobratí focusu) a farba pozadia ostane nezmenená.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 16.11.2009 13:39

dik.

No potreboval by som to na pevne urcenu napr. tretiu polozku. a dalsia vec ked klikam po listboxe tak to sfarbuje zakazdym vybranu polozku. Potreboval by som to tak ze iba button1 by treti item sfarbil a button2 odfarbil, pricom by pohyb (klikanie) po listboxe farby niako neovplyvnovalo :)

to by malo byt presne to co potrebujem


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] farebny text v listbox

Registrovaný: 11.01.09
Prihlásený: 29.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 16.11.2009 14:27

Snáď to už bude dobre :)

Kód:
var
  access: boolean = false;
  cisloPolozky: integer = 2;  // tretia polozka


procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin

  (Control as TListbox).Canvas.Brush.Color := clWhite;
  (Control as TListbox).Canvas.Font.Color := clBlack;

  if ((access) and (Index = cisloPolozky)) then begin
    (Control as TListbox).Canvas.Brush.Color := clWhite;
    (Control as TListbox).Canvas.Font.Color := clRed;
  end;

  (Control as TListbox).Canvas.FillRect(Rect);
  (Control as TListbox).Canvas.TextOut(Rect.Left+2,Rect.Top, (Control as TListbox).Items[Index]);

end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.Style:= lbOwnerDrawFixed;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button2.Click;
  access:= true;
  cisloPolozky:= StrToInt(Edit1.Text);
  ListBox1DrawItem(ListBox1, cisloPolozky, ListBox1.ItemRect(cisloPolozky), [odSelected]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  access:= false;
  ListBox1DrawItem(ListBox1, cisloPolozky, ListBox1.ItemRect(cisloPolozky), [odSelected]);
end;


Nevedel som, či sa má pozícia vykreslovaného riadku meniť, tak som určil, že sa meniť môže, konkrétne, že sa zadáva do Editu --> cisloPolozky:= StrToInt(Edit1.Text). V prípade, že má byť počas celého behu programu konštantné, tak stačí odstrániť v procedúre TForm1.Button1Click(Sender: TObject) riadky Button2.Click; a cisloPolozky:= StrToInt(Edit1.Text);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 16.11.2009 15:10

Skvele! presne takyto model som potreboval. Teraz si to uz vlozim do projektu :) diki moc


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 16.11.2009 15:50

a este by som rad to vyznacovanie pozadia pri oznaceni polozky. Skusal som to ze som pridal prvy riadok ale nieje to dobre. Ostava to sfarbene.



Kód:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin

  if index= (Control as TListbox).itemindex then (Control as TListbox).Canvas.Brush.Color := clBlue else
  (Control as TListbox).Canvas.Brush.Color := clWhite;
  (Control as TListbox).Canvas.Font.Color := clBlack;

  if ((access) and (Index = cisloPolozky)) then begin
    (Control as TListbox).Canvas.Brush.Color := clWhite;
    (Control as TListbox).Canvas.Font.Color := clRed;
  end;

  (Control as TListbox).Canvas.FillRect(Rect);
  (Control as TListbox).Canvas.TextOut(Rect.Left+2,Rect.Top, (Control as TListbox).Items[Index]);
  end;


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] farebny text v listbox

Registrovaný: 11.01.09
Prihlásený: 29.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 16.11.2009 16:37

Za predpokladu, že sa pôvodná vykresľovaná položka nemá farebne meniť, tak takto:

Kód:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin

  (Control as TListbox).Canvas.Brush.Color := clWhite;
  (Control as TListbox).Canvas.Font.Color := clBlack;

  if ((State = [odSelected]) or (State = [odSelected, odFocused])) then
      if ((Control as TListbox).Selected[Index]) then
          (Control as TListbox).Canvas.Brush.Color := clBlue;

  if ((access) and (Index = cisloPolozky)) then begin
    (Control as TListbox).Canvas.Brush.Color := clWhite;
    (Control as TListbox).Canvas.Font.Color := clRed;
  end;

  (Control as TListbox).Canvas.FillRect(Rect);
  (Control as TListbox).Canvas.TextOut(Rect.Left+2,Rect.Top, (Control as TListbox).Items[Index]);

end;


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 16.11.2009 16:52

Vdaka za ochotu :)


Odpovedať na tému [ Príspevkov: 10 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Farebný text v konzoly, vysvetlenie "argumentu"

v Assembler, C, C++, Pascal, Java

7

436

13.03.2017 20:04

GamerSK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Delphi: TCanvas.TextOut - ako na text s priesvitným pozadí

v Delphi, Visual Basic

6

1931

23.12.2007 21:58

p360t Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Visual Basic 6 Listbox po kliknuti,

v Delphi, Visual Basic

1

981

02.11.2008 13:33

Patkoo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. delphi zapis cisla do editu v delphi

v Delphi, Visual Basic

3

1100

11.05.2008 12:02

p360t Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. farebny cartridge

v Externé zariadenia

0

676

28.02.2009 11:09

pcman Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Farebny problem

v Operačné systémy Microsoft

5

1172

04.10.2008 20:01

Svolo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ako zmenit podmienku "where" pre listbox cez radiobutton ?

v JavaScript, VBScript, Ajax

0

417

18.02.2011 0:18

10tomi Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Farebny video efekt (prechod)???

v Video programy

1

371

04.09.2012 22:17

Fifik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Notebook do 400E (farebný)

v Notebooky a netbooky

8

857

12.06.2011 12:11

Volcano Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Farebný zadný kryt Moto G

v Mobilné zariadenia

3

379

02.07.2014 9:56

brmbo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. D: Stary farebny notebook Digital

v Vymením a darujem

0

381

10.07.2010 1:28

LuboZA Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Bridgestone predstavil najtenší ohýbateľný farebný el.

v Novinky

2

416

26.10.2007 17:07

mimkork Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Plynulý prechod z čiernobieleho na farebný obrázok

v JavaScript, VBScript, Ajax

1

397

28.03.2013 12:19

Merlin_sk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Aký farebný odtieň používa Kingston v HyperX Blue Serii ?

v Ostatné

16

533

03.05.2014 16:46

kuki_sk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. LG.Philips vyvinul prvý ohybný A4 farebný e-papier

v Novinky

1

476

14.05.2007 14:27

johny128 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. "farebny" notebook do 420€

v Notebooky a netbooky

9

1096

18.08.2011 10:28

jbakos Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra