Streifenmuster unter WinCE

Antworten
mayer
Beiträge: 23
Registriert: Mo 11. Feb 2008, 17:51
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Regau

Streifenmuster unter WinCE

Beitrag von mayer »

Hallo 8),
seit einiger Zeit beschäftige ich mich ja nun mit Grafik unter CE, aber nun stehe ich wieder an einer Hürde.

Ich habe mich mehrere Stunden damit beschäftigt aber es will nicht funktionieren.

hier mein Code: (zwei Versionen und beide funktionieren nicht)

Code: Alles auswählen

With ListIconBox.Picture.Bitmap.Canvas do
  begin
   {for i := 0 to ListIconBox.Height div 34 do begin
     Brush.Color := RGB(237,243,254);
     FillRect(Rect(0,i*16,ListIconBox.Width,16));
     Brush.Color := RGB(255,255,255);
     FillRect(Rect(0,(i+1)*16,ListIconBox.Width,16));
     //er müsste zu i immer +2 addieren
   end; }

   Brush.Color := RGB(255,0,0);
   FillRect(Rect(0,0*16,ListIconBox.Width,16));
   FillRect(Rect(0,2*16,ListIconBox.Width,16));
   FillRect(Rect(0,4*16,ListIconBox.Width,16));
   FillRect(Rect(0,5*16,ListIconBox.Width,16));
   Brush.Color := RGB(255,255,255);
   FillRect(Rect(0,1*16,ListIconBox.Width,16));
   FillRect(Rect(0,3*16,ListIconBox.Width,16));
   FillRect(Rect(0,5*16,ListIconBox.Width,16));
   FillRect(Rect(0,7*16,ListIconBox.Width,16));
  end;


Für schnelle und gute Hilfe wäre ich sehr dankbar!
Zuletzt geändert von mayer am Mo 25. Feb 2008, 17:46, insgesamt 1-mal geändert.

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Servus,

was heißt will nicht funktionieren?

Programm läuft, aber tut nicht, was es soll? Was tut es dann?
Programm bricht beim Kompilieren ab? Welche Fehlermeldung?
Hast du geschaut, wie weit die von dir verwendeten Komponenten von CE überhaupt unterstützt werden?

--> http://wiki.lazarus.freepascal.org/Roadmap

Was ist ListIconBox überhaupt für eine Komponente? Ein paar mehr Infos, bitte danke. Dann kann ich es nachbauen, oder du schickst mir das Projekt oder sonstwas.

Viele Grüße vom Cousin,

mayer
Beiträge: 23
Registriert: Mo 11. Feb 2008, 17:51
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Regau

Beitrag von mayer »

bembulak hat geschrieben:Was ist ListIconBox überhaupt für eine Komponente?

Naja, ich stelle mir hald selbst ein ListIconBox zusammen die hald streifen hat und ob es funktioniert?
Ja, aber nicht so wie gedacht. Siehst dir an ;)

mfg

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich nehme an es handelt sich um eine Listbox:

Code: Alles auswählen

ListIconBox.Picture.Bitmap.Canvas

muss so lauten:

Code: Alles auswählen

ListIconBox.Canvas


Ich weiß zwar nicht genau was du vor hast, aber wenn du "nur" eine Icon Liste habe möchtest hast du zwei einfache Möglichkeiten unter Lazarus:
01 - ListView mit Imagelist
02 - ListBox. Du packst in jedem Listbox Eintrag ein TBitmap rein. bei DrawItem zeichnest du einfach nur. Ich habe gerade heute für ein Projekt sowas gemacht:

Code: Alles auswählen

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
var
  t:Integer;
begin
  ListBox1.Canvas.FillRect(aRect);
  t:=TPlutoImageListItem(ListBox1.items.Objects[index]).tag;
  ListBox1.Canvas.Draw(ARect.Left,ARect.Top, TPlutoImageListItem(ListBox1.items.Objects[index]).image);
  if t = 0 then
    ListBox1.Canvas.Font.Color:=clBlack
  else
    ListBox1.Canvas.Font.Color:=clGray;
 
  ListBox1.Canvas.TextOut(ARect.Left+22,ARect.Top,ListBox1.items[index]);
end; // TForm1.ListBox1DrawItem   
 
// du musst den ListBox style auf lbOwnerDrawVariable settzen.
// Das füllen geht auch ganz leicht:
Listbox1.items.addobject(Caption, varTBitmap).


Ich hoffe das hilft dir irgendwie.... Grafik ist schon was tolles gerade Canvas. *G*

Edit00: Das Beispiel zeigt aber nur wenige Möglichkeiten Du kannst auch Brush und Pen verändert und den Status abfragen ob der Eintrag Markiert ist oder nicht. !
Der Code von oben ist nur als Beispiel gedacht. Du müsstet ihn noch anpassen für dein zweck !
MFG
Michael Springwald

mayer
Beiträge: 23
Registriert: Mo 11. Feb 2008, 17:51
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Regau

Beitrag von mayer »

danke pluto aber ich habe TImage und in dieses "mahle" ich eines art ListIconBox.
naja eigentlich wollte ich nur wissen warum bei mir das nicht richtig dargestellt wird...
Dateianhänge
ListBox.jpg

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Wenn ich das richtig verstehe fehlen einfach nur die Balken beim zweiten Beispiel oder wie ?
Tut mir leid ich kann mir nicht vorstellen was du meinst. Im Beispiel oben fällt evlt. ein TextOut.... beschreibe es mal genauer.

Um auf das Canvas der Image zu zeichnen reicht auch:
ListIconBox.Canvas
Normalerweise glaube ich.
MFG
Michael Springwald

mayer
Beiträge: 23
Registriert: Mo 11. Feb 2008, 17:51
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Regau

Beitrag von mayer »

Mach mal bei Lazarus ein neues Projekt auf und zeichne auf die form ein TImage mit Name := ListIconBox und beim event OnCreate (von TForm)
gibst du ein:

Code: Alles auswählen

procedure ...;
var
ListTempImage : TBitmap;
begin
  ListTempImage := TBitmap.Create;
  ListTempImage .Width := ListIconBox.Width;
  ListTempImage .Height := ListIconBox.Height;
  ListIconBox.Picture.Bitmap := ListTempImage ;
  ListTempImage .Free;
 
  With ListIconBox.Picture.Bitmap.Canvas do
    begin
     {for i := 0 to ListIconBox.Height div 34 do begin
       Brush.Color := RGB(237,243,254);
       FillRect(Rect(0,i*16,ListIconBox.Width,16));
       Brush.Color := RGB(255,255,255);
       FillRect(Rect(0,(i+1)*16,ListIconBox.Width,16));
       //er müsste zu i immer +2 addieren
     end; }

     Brush.Color := RGB(255,0,0);
     FillRect(Rect(0,0*16,ListIconBox.Width,16));
     FillRect(Rect(0,2*16,ListIconBox.Width,16));
     FillRect(Rect(0,4*16,ListIconBox.Width,16));
     FillRect(Rect(0,5*16,ListIconBox.Width,16));
     Brush.Color := RGB(255,255,255);
     FillRect(Rect(0,1*16,ListIconBox.Width,16));
     FillRect(Rect(0,3*16,ListIconBox.Width,16));
     FillRect(Rect(0,5*16,ListIconBox.Width,16));
     FillRect(Rect(0,7*16,ListIconBox.Width,16));
  end;
end;


dann wirst du sehn das es nicht richtig angezeigt wird!

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

LOL, ich wollte deinen Code gerade mal so testen, da meckert mir Lazarus rum, dass der Identifier "RGB()" nicht gefunden werden kann. Spaßig. :(

Hat mal schnell wer einen Tip, welche Unit mir da weiterhilft (die ich offenbar nicht in meiner Uses-Klausel habe). Danke.

mayer
Beiträge: 23
Registriert: Mo 11. Feb 2008, 17:51
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Regau

Beitrag von mayer »

Code: Alles auswählen

function RGB(const R, G, B: Byte): Integer;
begin
  Result := R + G shl 8 + B shl 16;
end;

hier viel spaß!

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

bembulak hat geschrieben:LOL, ich wollte deinen Code gerade mal so testen, da meckert mir Lazarus rum, dass der Identifier "RGB()" nicht gefunden werden kann. Spaßig. :(

Hat mal schnell wer einen Tip, welche Unit mir da weiterhilft (die ich offenbar nicht in meiner Uses-Klausel habe). Danke.


LCLIntf oder die Funktion RGBToColor(); aus Graphics müsst's auch tun.

mayer
Beiträge: 23
Registriert: Mo 11. Feb 2008, 17:51
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Regau

Beitrag von mayer »

Naja danke für die vielen Antworten, aber dann muss ich das Problem wohl anders lösen...
Danke!

Antworten