Komponenten Samlng für Lazarus.
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
ich komme nicht mit.....
woher kommt diese Procedure und wo muss man was aufrufen (in welcher Kompo), dass es klappt?
Ich verstehe es überhaupt nicht, da der Benutzer (d.h. der Programmierer, der die Kompo benutzt) ja die Farben zusammen mit den Items irgendwie festlegen muss.
Es wäre schön, wenn du alles kleinschrittiger erklären könntest.
woher kommt diese Procedure und wo muss man was aufrufen (in welcher Kompo), dass es klappt?
Ich verstehe es überhaupt nicht, da der Benutzer (d.h. der Programmierer, der die Kompo benutzt) ja die Farben zusammen mit den Items irgendwie festlegen muss.
Es wäre schön, wenn du alles kleinschrittiger erklären könntest.
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Ja genau. Seltsammer Fehler. Bei mir klappt es.Ja die kenne ich directoryseparator.
hmmm macht es es plattformunabhängig?
Er sollte vor jedem Eintrag ein Viereck in der jeweiligen Farbe zeichnen.
@ DiBo33
Genau so habe ich das auch eigentlich bei mir gemacht.
Ich verstehe den Fehler im Moment nicht so ganz. Bei mir klappt es wie gesagt. Wenn dir dir das Bild anschaust wirst du es auch sehen.
MFG
Michael Springwald
Michael Springwald
Erstelle dir eine neue Applicationwoher kommt diese Procedure und wo muss man was aufrufen (in welcher Kompo), dass es klappt?
Kopiere die Procedure in die Unit1.pas unterhalb von implementation.
Füge eine TListBox auf das Formular hinzu.
Setze die Eigenschaft Style auf lbOwnerDrawFixed.
Bei Ereignisse doppelclick auf OnDrawItem und schreibe in dieser Procedure
Code: Alles auswählen
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
begin
ColorList(TListBox(Control).Canvas, clSkyBlue, TListBox(Control).Color, Index,
State, ARect, TListBox(Control).Items[Index]);
end;
clSkyBlue => diese Farbe musst du selbst festlegen
TListBox(Control).Color => das ist die Farbe von der Eigenschaft Color, Standard clWindow
In der Procedure selbst wird dann je nachdem ob der aktuelle Index gerade oder ungerade ist, die jeweilige Farbe ausgewählt
Code: Alles auswählen
if odd(index) then c := aColor else c := eColor;
Richtig, deshalb fragte ich dich ja anhand welchen Kriterien du die Farben festlegen willst, bei meinem Beispiel habe ich nur eine Auswahl (gerade oder ungerade).Ich verstehe es überhaupt nicht, da der Benutzer (d.h. der Programmierer, der die Kompo benutzt) ja die Farben zusammen mit den Items irgendwie festlegen muss.
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
hmmm was bewirken die verschiedenen modi?DiBo33 hat geschrieben:Setze die Eigenschaft Style auf lbOwnerDrawFixed.
cool ich wusste garnicht, dass listbox ein sooooo cooles ereignis hat. Wann genau wird es ausgeführt? Es muss ja passieren, nchdem alles schon fertig gezeichnet wurde oder? ohhh nein, es wird vorher ausgeführt:DiBo33 hat geschrieben:Bei Ereignisse doppelclick auf OnDrawItem und schreibe in dieser Procedure
Code: Alles auswählen
procedure TCustomListBox.DrawItem(Index: Integer; ARect: TRect;
State: TOwnerDrawState);
var
OldBrushStyle: TBrushStyle;
OldTextStyle: TTextStyle;
NewTextStyle: TTextStyle;
begin
//DebugLn('TCustomListBox.DrawItem ',DbgSName(Self));
if Assigned(FOnDrawItem) then
FOnDrawItem(Self, Index, ARect, State)
else if not (odPainted in State) then
begin
FCanvas.FillRect(ARect);
if (Index>=0) and (Index < Items.Count) then begin
OldBrushStyle := FCanvas.Brush.Style;
FCanvas.Brush.Style := bsClear;
OldTextStyle := FCanvas.TextStyle;
NewTextStyle := OldTextStyle;
NewTextStyle.Layout := tlCenter;
FCanvas.TextStyle := NewTextStyle;
FCanvas.TextRect(ARect, ARect.Left+2, ARect.Top, Items[Index]);
FCanvas.Brush.Style := OldBrushStyle;
FCanvas.TextStyle := OldTextStyle;
end;
end;
end;
Cooooooooooooooooooooooooooooooooooooool:
Code: Alles auswählen
aCanvas.Font.Color:=clRed;
Wieso hat noch keiner eine Listbox mit Farbigen einträgen programmiert, wenn es so dermaßen einfach ist? Oder kennt ihr eine?
Code: Alles auswählen
aCanvas.Font.Color:=RGBToColor(Random(255),Random(255),Random(255));
ok. ich programmiere mir meine eigene, das ist ja nicht soo schwer..... falls ich sie ordentlich hinkriege, stelle ich sie ins Forum!
@DiBo33: Gigantischen Dank für das Augenöffnen!
Gruß Alexander
EDIT: Geschafft
http://www.lazarusforum.de/viewtopic.php?p=18916#18916" onclick="window.open(this.href);return false;
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
z.b. ist dieser Modus dafür verantwortlich das so gezeichnet wird wie eigentlich vorgesehen. Also wird z.b. das DrawItem Event nicht aufgerufen. So wie ich das verstanden habe.DiBo33 hat folgendes geschrieben:
Setze die Eigenschaft Style auf lbOwnerDrawFixed.
hmmm was bewirken die verschiedenen modi?
Wieso ? Es gibt doch eine in Lazarus und eine habe ich gemacht. Evlt. verstehe ich nicht was du meinst. Du möchtest die Ganzen Einträge Farbig haben und nicht nur ein Viereck vor dem Eintrag ?Wieso hat noch keiner eine Listbox mit Farbigen einträgen programmiert, wenn es so dermaßen einfach ist? Oder kennt ihr eine?
Wenn ja das könnte ich bei mir ganz leicht einbauen.
Es bringt leider nachteile mit das onDrawItem Event zu nutzen. Du wirst schon sehen welche.
Ich verstehe nicht was du gegen meine hast oder gegen die von Lazarus hast.
Die ColorListBox sollte Platformunabhänig sein. Evlt. könnte sich ja mal jemand von euch meinen Soruce anschauen ?
Code: Alles auswählen
procedure TPlColorListBox.DrawItem(Index: Integer; ARect: TRect;
State: TOwnerDrawState);
begin
canvas.FillRect(arect);
canvas.Brush.color:=String2ToColor(Items[index]);
canvas.FillRect(0,0,20,20);
canvas.TextOut(20,arect.top,Items[index]);
end;
constructor TPlColorListBox.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
Style:=lbOwnerDrawVariable;
// Diese Funktion bewirkt das in alle Einträgen die Farben stehen. Also die Farbnamen wie pl_red2 oder so.
ColorToStringList(Items);
end;
Eigentlich sollte das doch auch klappen oder nicht ?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Also das habe ich doch schon hundertmal erklärt, farbiger Text, kein kästen vorne dran.....pluto hat geschrieben:Wieso ? Es gibt doch eine in Lazarus und eine habe ich gemacht. Evlt. verstehe ich nicht was du meinst. Du möchtest die Ganzen Einträge Farbig haben und nicht nur ein Viereck vor dem Eintrag ?
Wenn ja das könnte ich bei mir ganz leicht einbauen.
na ja seis drum ich habe mir jetzt meine eigene Programmiert und hochgeladen. Siehe link im vorherigen Post.
Klappt wunderbar...
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Wiso sollte man dazu eine separate Komponente erstellen ? Wenn man Farbige Einträge braucht überschreibt man einfach dieses Ereignis...Wieso hat noch keiner eine Listbox mit Farbigen einträgen programmiert, wenn es so dermaßen einfach ist? Oder kennt ihr eine?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Das finde ich extremst unpraktikabel; gerade, wenn man viele Einträge hat und zu jedem eine andere Farbe haben will.Christian hat geschrieben:Wiso sollte man dazu eine separate Komponente erstellen ? Wenn man Farbige Einträge braucht überschreibt man einfach dieses Ereignis...Wieso hat noch keiner eine Listbox mit Farbigen einträgen programmiert, wenn es so dermaßen einfach ist? Oder kennt ihr eine?
Da finde ich doch meine Komponente einfach eleganter.
Gruß Alexander
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Naja was sollst. Meine Komponenten können also installiert werden und auch genutzt werden.
Was ich jetzt nur noch brauch sind andere ICONS. Wenn mir da jemand weiter helfen könnte.
Ach ja die Datei Verwaltungs Komponenten laufen leider noch nicht unter Windows.
Weil ich \ verwende satt der besagten Variable. Wenn Interesse besteht werde ich es sofort ändern.
Dann sollten sie auch unter Windows laufen.
Aber ich frage mich gerade ob ich nicht zwei Register nehmen sollten.
eine für meine Datei Verwaltungs Komponenten und eine für alle anderen. Also sowas:
Pluto Datei
Pluto Sonstiges
Was ich jetzt nur noch brauch sind andere ICONS. Wenn mir da jemand weiter helfen könnte.
Ach ja die Datei Verwaltungs Komponenten laufen leider noch nicht unter Windows.
Weil ich \ verwende satt der besagten Variable. Wenn Interesse besteht werde ich es sofort ändern.
Dann sollten sie auch unter Windows laufen.
Aber ich frage mich gerade ob ich nicht zwei Register nehmen sollten.
eine für meine Datei Verwaltungs Komponenten und eine für alle anderen. Also sowas:
Pluto Datei
Pluto Sonstiges
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Hmmm probiere mal aus ein Bildschirmfoto von deiner Kompo zu machen und es so weit zu verkleinern bis es Icon größe erreicht hat. Dann kannst du eventuell noch striche nachzeichnen.pluto hat geschrieben:Was ich jetzt nur noch brauch sind andere ICONS. Wenn mir da jemand weiter helfen könnte.
Kannst ja mal ausprobieren....
directoryseparator?pluto hat geschrieben:Ach ja die Datei Verwaltungs Komponenten laufen leider noch nicht unter Windows.
Weil ich \ verwende satt der besagten Variable. Wenn Interesse besteht werde ich es sofort ändern.
Dann sollten sie auch unter Windows laufen.
Lieber nicht, sonst werden es zu viele Register, wenn das jeder Komponenten Programmier macht.....pluto hat geschrieben:Aber ich frage mich gerade ob ich nicht zwei Register nehmen sollten.
eine für meine Datei Verwaltungs Komponenten und eine für alle anderen. Also sowas:
Pluto Datei
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Naja bei den VCL Komponenten die es nur für Delphi gibt haben sie das auch gemacht.Lieber nicht, sonst werden es zu viele Register, wenn das jeder Komponenten Programmier macht.....
Naja ich kann das ja machen sobald ich z.b. über 30 Komponenten habe oder so. Also wenn sich das lohnt.
Ja genau von der directoryseparator spreche ich.
(Ich kann dieses Wort einfach nicht schreiben.)
Die Idee ist nicht schlecht. Sobald ich lust und Laune dazu habe mache ich das mal. Danke. Aber bis dahin sollten eigentlich die jetztigen Aussreichen.Hmmm probiere mal aus ein Bildschirmfoto
Wer hat sich meine Komponenten eigentlich schon Installiert ? ich möchte eigentlich nur wissen ob sie Installiert werden können und ob sie auch Laufen. Mir ist bewusst das einige Komponenten noch Fehler haben.
Die Meisten Komponenten sind entweder von TListBox abgeleitet oder von TComboBox.
Und wie gesagt ich werde in laufe der Zeit evlt. noch mehr solche einfachen Komponenten erstellen.
Z.b. möchte ich noch unbedingt so ein LinkLabel schreiben.
Wenn ihr noch Idee oder Vorschläge habt nur her damit. Die Komponenten sollten nicht allzuschwer sein.
Aber ich überlege noch sowas wie ein einfaches HTMLLabel zu schreiben.
Was z.b. für ein Info Dialog verwendet werden kann.
Mal sehen. Meine Variante wenn ich sowas mache kann dann aber nur sehr wenig. Nur die Standard sachen wie
B, I, U, FontGröße, FontFarbe und sowas halt. Mal sehen.
Ich glaube sowas hat auch mehr sin bei mir als sowas großes wie jetzt meine Editor Komponente.
Und es hat bestimmt auch mehr vorteile.
Ich möchte noch mal die Font Listbox und die FontComboBox nochmal verbessern/verschnellen.
Dazu habe ich auch schon eine Idee, weil auf meinen Notebook war das ständige Font ändern zu langsam.
hier möchte ich ein Buffer nehmen wo ich alle Einträge untereinander zeichne und dann per BitBlt rauß kopiere.
Das dürfte keine Probleme machen.
Evlt. mache ich das auch bei den Color Varianten. Mal sehen.
Wobei das ColorFehld möchte ich auch noch verbessern. Z.B. im Fromdesinger kann man jeden Shape Anklicken.
das möchte ich nicht. Ich möchte das nur das Panel anklickbar ist.
Hat da jemand ein Tipp ?
Für das ColorFehld nehme ich ein Panel eine Scrollbox und sehr viele Shape Komponenten.
Wobei die Shape Komponenten könnte ich auch drauf verzichten und selbst zeichnen, aber so war es einfacher.
Aber auf die Scrollbox kann ich nicht verzichten in diesen Fall. Mein Ziel ist es das wenn die Komponente im Desinger anklickt wird nur das Panel anklickt wird und sonst nix, und zur Laufzeit soll jedes Shape anklicktbar sein.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Ich will ja nichts sagen, da ich gesagt habe sie sind nicht so wichtig, aber sie die mal die "Icons" im Screenshot an... (nicht das es schlimm wärepluto hat geschrieben:Die Idee ist nicht schlecht. Sobald ich lust und Laune dazu habe mache ich das mal. Danke. Aber bis dahin sollten eigentlich die jetztigen Aussreichen.

Hier! ubuntu 7.10 (bald 8.04) 64bitpluto hat geschrieben:Wer hat sich meine Komponenten eigentlich schon Installiert ? ich möchte eigentlich nur wissen ob sie Installiert werden können und ob sie auch Laufen. Mir ist bewusst das einige Komponenten noch Fehler haben.
ich habe noch nicht alle ausprobiert, aber installieren klappt problemlos
Ich habe das selbe Problem und wäre ebenfalls sehr an der Lösung interessiert.pluto hat geschrieben:Mein Ziel ist es das wenn die Komponente im Desinger anklickt wird nur das Panel anklickt wird und sonst nix,
- Dateianhänge
-
- Bildschirmfoto.png (8.64 KiB) 2758 mal betrachtet
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
lbStandard: Die Listeneinträge werden nicht vom Programm gezeichnet.hmmm was bewirken die verschiedenen modi?
lbOwnerDrawfixed: Die Listeneinträge werden vom Programm gezeichnet. Ihre Höhe wird in der Eigenschaft ItemHeight festgelegt.
lbOwnerDrawVariable: Die Listeneinträge werden vom Programm gezeichnet und können unterschiedliche Höhen aufweisen.