[B+] Column Listbox

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

TheProgrammer

Betreff: [B+] Column Listbox

BeitragDo, Okt 12, 2006 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

da es in BlitzPlus leider keine Möglichkeit gibt, Kategorielisten zu realisieren, habe ich mir einfach mal die Mühe gemacht, mir selber eine zu schreiben.

Arrow Screenshot
Arrow Download [1,69 MB]
Enthalten sind der Code und eine *.exe.

~ Features ~

Arrow Listen können komplett umgestylet werden
Arrow Einträge können nach Alphabet und Größe sortiert werden
Arrow Sehr einfache Implementierung in ein BlitzPlus-Programm
Arrow Mehrere Datentypen möglich
Arrow Anhängen von Einheiten und Icons möglich

~ Funktionen ~

Code: [AUSKLAPPEN]
InitColumnListbox()

Diese Funktion muss am Anfang des B+-Programms ausgeführt werden, damit die Grafiken für die Listen geladen werden können.

Code: [AUSKLAPPEN]
list = CreateColumnListbox(x%,y%,width%,height%,group,[columns$,empty_msg$,style])

Mit dem Befehl wird eine leere Listbox erstellt.

x% - x-Position der Listbox
y% - y-Position der Listbox
width% - Breite der Listbox
height% - Höhe der Listbox
group - Identität einer Gruppe
columns$ - Bezeichnung der Spalten (columns$="Spalte_1,breite%,typ%,...,Spalte_n,breite%,typ%")

Code: [AUSKLAPPEN]
Datentypen:
1 - Integer
2 - Float
3 - String
4 - Progbar
5 - Zeit
6 - Datum


empty_msg$ - Nachricht, die angezeigt wird, wenn keine Einträge vorhanden sind.
style - 1=Rahmen einschalten; 65536=Objekt fixieren

Es wird die Identität des Panels zurückgeliefert, kann also auch so gehandled werden.


Code: [AUSKLAPPEN]
entry = AddColumnListboxEntry(list,entry$,[show])

Mit AddColumnListboxEntry wird einer Listbox ein Eintrag hinzugefügt.

list - Identität der Listbox
entry$ - Bezeichnung der Einträge (entry$="eintrag_1,eintrag_2,...,eintrag_n")

Code: [AUSKLAPPEN]
Folgende erweiterte Parameter sind möglich:
- img#[imagehandle] Icon wir vor Eintrag gesetzt
- unit#[Einheit] (z.B. kg) Einheit wird hinter Eintrag gesetzt
- multi#[wert] legt einen Erweiterungswert für die Zahl fest, die sortiert werden soll
- short#[stellen] trennt Kommastellen ab


show - wenn true, dann wird die Listbox nach dem Eintragen geupdated. Wenn false, dann muss UpdateColumnListboxSize(obj) nach dem Eintragen ausgeführt werden


Code: [AUSKLAPPEN]
ModifyColumnListboxEntry(list,entry,entry$,[show])

Mit ModifyColumnListboxEntry kann ein Eintrag geändert werden.

list - Identität der Listbox
entry - Identität des zu ändernden Eintrags
entry$ - neuer Eintrag
show - wenn true, dann wird die Listbox nach dem Eintragen geupdated. Wenn false, dann muss UpdateColumnListboxSize(obj) nach dem Eintragen ausgeführt werden


Code: [AUSKLAPPEN]
UpdateColumnListbox(event)

Dieser Befehl muss in der Hauptschleife stehen, damit alle Aktionen übernommen werden.

event - Der Wert, der durch WaitEvent() zurückgeliefert wird
Für eine optimale Funktionalität muss man Waitevent(1) benutzen, damit das programm nicht aufgehalten wird.

Code: [AUSKLAPPEN]
handle = ColListHandle(list)

Gibt die eigentliche Listboxidentität anhand des Panels zurück

list - Listboxidentität

Code: [AUSKLAPPEN]
UpdateColumnListboxSize(handle)

Dieser Befehl berechnet die Listbox-Größe und muss ausgeführt werden, wenn die Panel-Größe der Listbox geändert wurde.

handle - eigentliche Identität der Listbox, durch ColListHandle(list) zu ermitteln

Code: [AUSKLAPPEN]
entry = PressedColumnListboxEntry(list)

Liefert den Eintrag einer Listbox zurück, der durch einen Doppelklick gewählt wurde.

list - Identität der Listbox

Code: [AUSKLAPPEN]
SelectedColumnListboxEntry(list)

Liefert den Eintrag zurück, der gerade angewählt ist.

list - Identität der Listbox

Code: [AUSKLAPPEN]
SelectColumnListboxEntry(list,entry)

Selektiert einen Bestimmten Eintrag in einer Listbox.

list - Identität der Listbox
entry - Identität des Eintrags


Code: [AUSKLAPPEN]
FreeColumnListboxEntry(list,entry,[show])

Löscht einen bestimmten Listbox-Eintrag.

list - Identität der Listbox
entry - Identität des Eintrags
show - wenn true, dann wird die Listbox nach dem Löschen geupdated. Wenn false, dann muss UpdateColumnListboxSize(obj) nach dem Löschen ausgeführt werden


Code: [AUSKLAPPEN]
DeleteColumnListbox(list)

Löscht alle Einträge in einer Listbox.

list - Identität der Listbox

Code: [AUSKLAPPEN]
FreeColumnListbox(list)

Löscht die ganze Listbox.

list - Identität der Listbox

~ Styling ~

In der columns.bb werden in den ersten Zeilen bestimmte Eigenschaften und Grafiken definiert:

bg_color - Farbe des Hintergrunds
text_color - Farbe des Textes
progbar_color - Farbe des Ladebalkens
brogborder_color - Farbe des Randes des Ladebalkens
slider_size - Breite der Slider
dubbleclick_time - Zeit, in der ein Doppelklick erfolgen muss (in ms)
font_name - Schriftart
font_size - Schriftgröße

column_style - Pfad der Spalten-Grafik

Diese Grafik muss in 3 Zeilen eingeteilt werden. Der Spalte im normalen Zustand, darunter im Zustand, wenn die Maus sich darüber befindet und darunter im Zusatand, wenn die Maus draufklickt.
Jeweils die erste vertikale Pixelreihe beinhaltet die Trennlinie zwischen den Spalten.

selection_style - Pfad der Markierungs-Grafik
Diese beinhaltet die Grafik, die angezeigt wird, wenn ein Eintrag markiert wird. Die erste Pixelreihe gibt wieder die Abgrenzung an.

sort_style - Pfad der Grafik für den Sortierungspfeil
Diese Grafik beinhaltet die Sortierungspfeile. Sie müssen in der Breite gleich groß sein und liegen nebeneinander. Insgesamt müssen sie aber relativ klein sein.


Das Beispiel beinhaltet einen WinXP-Style und einen MacOS-Style.

~ Userlib ~

Folgendes muss in die user32.decls
Code: [AUSKLAPPEN]
.lib "user32.dll"
LoadCursor%( ID, Cursor ):"LoadCursorA"
SetCursor%( ID ):"SetCursor"



Vorschläge und Kritik sind erwünscht. Wink

Mfg
TheProgrammer
  • Zuletzt bearbeitet von TheProgrammer am Do, Apr 19, 2007 21:23, insgesamt 4-mal bearbeitet

Blitzcoder

Newsposter

BeitragDo, Okt 12, 2006 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist schön geworden. Ich hab zwar nur die Exe getestet, aber es sieht gut aus, und , zumindest dabei, hab ich keine Käfer gefunden Wink
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

StepTiger

BeitragDo, Okt 12, 2006 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
2 fehler in der exe:
wenn man nach werten ordnen lässt, die gleich sind, dann wird es sehr sinnlos angeordnet

wenn man nach ip ordnet, dann wird es falsch geordnet. falsch in sofern, dass irgendwo 255.13.4.8 steht, dann drunter 123.21.94.2 und darunter wieder 128.231.122.254
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

$tankY

BeitragFr, Okt 13, 2006 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit der IP liegt daran, dass er nur nach der 1. Ziffer ordnet, dann -wenn nötig- nach der 2. dann nach der 3. und so weiter.
Aber sonst is es ein sinvolles "AddOn", Lob an TheProgrammer!
 

#Reaper

Newsposter

BeitragFr, Okt 13, 2006 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Echt nice! Very Happy
Hatte mich schon geärgert, weil es sowas in B+ nicht gab Sad *grml*
Leider wird nicht der wirkliche WindowsStyle benutzt, wenn man nicht den Standart hatt, fällt das auf.. Wink Muss man dann halt alles in einem neuen Style machen^^ Very Happy

Thx4This! Very Happy
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

StepTiger

BeitragFr, Okt 13, 2006 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
hätte er nach der ersten ziffer geordnet sähe es nicht so aus:

234.117.232.18
127.0.1.34
213.231.23.11

oder so in der art

ich nehme eher an, er ordnet nicht richtig. vielleicht nach der normalen ip und nicht nach der dotted ip?
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

$tankY

BeitragFr, Okt 13, 2006 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir siehts eher so aus:
102.xxx.xxx.xxx
24.xxx.xxx.xxx
250.xxx.xxx.xxx
30.xxx.xxx.xxx

Goodjee

BeitragFr, Okt 13, 2006 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt doch: 3,2,2,1 was isdt daran jetzt falsch?
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

TheProgrammer

BeitragFr, Okt 13, 2006 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal danke für die positiven Kommentare. Very Happy

Sortiert wird hier nach dem Quicksort-Algorithmus (die IP's werden als Strings sortiert). Ich kann mir deshalb auch nicht so richtig erklären, warum sie bei StepTiger so eigenartig angeordnet werden. Confused

Ich denke, ich müsste da einen anderen Sortier-Algo schreiben, um bestimmte Datentypen (also auch IP's und z.B. Daten oder Uhrzeiten) richtig anordnen zu können. D.h. ich müsste mir noch bestimmte Spaltenkategorien einfallen lassen. ^^

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being
 

$tankY

BeitragFr, Okt 13, 2006 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@Goodjee:
Daran ist nichts verkehrt, wollte nur StepTiger zeigen, dass es bei ihm etwas komisch ist. Vielleicht hat er einfach falsch hingeschaut, oder nicht sortiert Very Happy
 

Steve0

BeitragFr, Okt 13, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Find ich toll das Ganze.
Aber einen Fehler hab ich gefunden: Wenn man auf einen Eintrag doppelklickt, dann das erscheinende Fenster bestätigt und dann mit der Maus über die Zeile (also da wo "IP","Port",...) über den Einträgen fährt dann wird die Spalte ohne zu Klicken verbreitert oder verschmällert.
Pixelgenaue 2D SingleSurface Engine!!!
 

$tankY

BeitragFr, Okt 13, 2006 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Fehler kenn ich, liegt daran, dass die Tase dannach nicht mit FlushMouse gelöscht wurde:
For I = 1 To 20
If p = entry(I) Then Notify("Eintrag "+I+" wurde betätigt.") : FlushMouse()
Next
~Edit~
Habs nun!

StepTiger

BeitragSa, Okt 14, 2006 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
meins war auch nur beispielhaft

wieso als string sortiert?

sortier es nach der eigentlichen ip

also sinnvoll

nicht

123.xxx.xxx.xxx
24.xxx.xxx.xxx
253.xxx.xxx.xxx
36.xxx.xxx.xxx

sehr sinnlos finde ich.

Müsste dann so aussehen:
24.xxx.xxx.xxx
36.xxx.xxx.xxx
123.xxx.xxx.xxx
253.xxx.xxx.xxx


verstanden, was ich meine?
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

TheProgrammer

BeitragDo, Okt 26, 2006 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

hab mich mal ran gemacht und die Listbox ein wenig erweitert, bzw. einige kleine Bugs entfernt: Wink

Arrow Screenshot
Arrow Download [1,69 MB]

Folgendes wurde hinzugefügt:
Man kann nun mehrere Datentypen für die Spalten benutzen (Integer, Float, String, Progbar, Zeit, Datum). Außerdem hat man nun die Möglichkeit, Icons einzufügen, Einheiten an Werte ranzuhängen, diese Werte beim Sortiervorgang mit einem bestimmten Wert erweitern zu lassen oder Kommastellen abzutrennen.
Mit dem Befehl ModifyColumnListboxEntry() kann man nun Einträge ändern.

Dies geschieht mit folgenden Parametern, die einfach in die Angabe der Werte mit eingefügt werden müssen:

- img#[imagehandle] fügt ein icon ein
- unit#[Einheit] legt eine Einheit fest
- short#[Stellen] trennt Kommastellen ab
- multi#[wert] erweitert den Wert mit einer Zahl beim Sortieren

Genauere Informationen findet ihr dann im ersten Post und in den Beispielen.

Viel spaß damit Wink
Vorschläge und Kritik sind wünschenswert.

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being
 

lettorTrepuS

BeitragDo, Okt 26, 2006 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

StepTiger

BeitragDo, Okt 26, 2006 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
bitte ordne die IPs so, dass es nicht nach string, sondern nach werten geordnet wird.

Bsp:
Dein Algo ordnet so:
113.xxx.xxx.xxx
150.xxx.xxx.xxx
153.xxx.xxx.xxx
162.xxx.xxx.xxx
163.xxx.xxx.xxx
194.xxx.xxx.xxx
215.xxx.xxx.xxx
218.xxx.xxx.xxx
54.xxx.xxx.xxx
59.xxx.xxx.xxx

oder eben so:
59.xxx.xxx.xxx
54.xxx.xxx.xxx
218.xxx.xxx.xxx
215.xxx.xxx.xxx
194.xxx.xxx.xxx
163.xxx.xxx.xxx
162.xxx.xxx.xxx
153.xxx.xxx.xxx
150.xxx.xxx.xxx
113.xxx.xxx.xxx

eigentlich müsste es so aussehen:
59.xxx.xxx.xxx
54.xxx.xxx.xxx
113.xxx.xxx.xxx
150.xxx.xxx.xxx
153.xxx.xxx.xxx
162.xxx.xxx.xxx
163.xxx.xxx.xxx
194.xxx.xxx.xxx
215.xxx.xxx.xxx
218.xxx.xxx.xxx

oder eben so:
218.xxx.xxx.xxx
215.xxx.xxx.xxx
194.xxx.xxx.xxx
163.xxx.xxx.xxx
162.xxx.xxx.xxx
153.xxx.xxx.xxx
150.xxx.xxx.xxx
113.xxx.xxx.xxx
59.xxx.xxx.xxx
54.xxx.xxx.xxx


BITTE!
und wieder das Selbe:
Falls der Wert des Ordnungskriteriums gleich mit einem anderen ist, wird sinnlos geordnet. (Oder eben nicht.)
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Smily

BeitragDi, Jun 05, 2007 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
1.) Großes Lob - Das ding ist Geil
2.) Der link vom 2. Download ist kaputt.
Ist der erste download die Aktuelle datei?
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

TheProgrammer

BeitragDi, Jun 05, 2007 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank. Smile
Der Download im ersten Post ist die aktuelle Version. Wink

Mfg
aktuelles Projekt: The last day of human being

BladeRunner

Moderator

BeitragDi, Jun 05, 2007 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte Dich bitten den Code so zu posten da links halt gerne mal off gehen.
Danke im Voraus
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

klin

BeitragMi, Jul 11, 2007 6:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir das mal seit langem angegugt und hatte dabei die interesse Verloren Confused Aber nun da ich es für mein Programm brauche, und ich es schon gut eingewendet habe, giebt es da doch ein kleines Problemschen das mich ein wenig stutzig macht. Wenn mann ne Box verstecken will, wäre ja eigentlich leicht! Aber das giebt es nicht Confused ich meine z.B.
Hidecolumnbox(panel)

...

Showcolumnbox(panel)

so... Aber das gibt es nicht es giebt zwar fee und delet aber nicht hide und show...

Wäre sehr nett wenn du das nich hinbekommen würdest Smile

MFG
Klin

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group