Autor Beitrag
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 17.05.11 20:38 
BassLib
Die Klasse kapselt die "bass.dll" und ihre Erweiterungen in mehreren Klassen. Sie ist der direkte Nachfahre von TBassSound allerdings in keinsterweise kompatible.

(veraltet)TBassSound
Die Klasse kapselt die "bass.dll" und ihre Erweiterungen in einer einfach zu nutzenden Klasse.
Ein größer Dank geht an Daniel Gaußmann für sein Tutorial hier.

Unterstützung
getested wurde nur mit Delphi XE 2, es sollte aber ohne Probleme bis Delphi 7(ab version 0.4) oder Delphi 2009(ab 1.0, wegen Generics, das könnte man jedoch ändern, dann sollte es bis Delphi 7 laufen) funktionieren.
Mit Lazarus geht es (noch) nicht, eventuell fällt mir noch was kluges ein.

Bekannte Bugs:
*BassOptions.OutputBufferLength funktioniert nicht. Da weiß ich nochnicht woher der Bug kommt. Wenn wer ne Idee hat, immer her damit.

ToDo:
*Bugfixes
*unterstützung für *.mod musik
*kleine bugs verschwinden lassen die entstehen wenn man z.b. bei BassURLSound versucht vor/zurück zu springen


Zusätzlich benötigt:
bass.dll und Header-Unit (erhältlich hier)

Downloads:
Leider gibt es aufgrund einer Größenbeschränkung der Anhänge hier nur den Quelltext als Anhang, Binarys nur external gehostet.



Zitat:

Changelog

----17.05.2011 0.1
*Erste Version

----18.05.2011 0.2
*Dynamisches Laden der bass.dll ist jetzt möglich
*Bessere Funktion unter älteren Delphis

----20.08.2011 0.3
*Kleine Bugfixe
*Fehler in den Datumsangaben der Versionsgeschichte behoben
*Rückgabewert der funktion "InitBassPlugins" war fehlerhaft, jetzt gefixt
*Verbessete Lazaruskompatibilität
*CPU-Belastung durch Soundausgabe kann jetzt abgefragt werden

----26.08.2011 0.4
*Events "OnLoad", "OnPlay", "OnStop", "OnPause", "OnVolumeChange" hinzugefügt
*Kleine Fehlerbehebungen und Optimierungen
*Die Events "OnProgressChange", "OnEnd", "OnStatusChange" hinzugefügt, allerdings nur verfügbar wenn der Unit das Application.OnIdle event abfragen darf.

----18.09.2011 0.5
*Bug gefixt: "LoadFromStream" funktioniert jetzt
*Neue property: Loop (gibt an ob die datei wiederholt werden soll)
*Auslösen der Change events verbessert
*Fehler im Beispielprogramm behoben
*Fehler in LoadFromStream behoben

----20.09.2011 0.6
*OnEnd verbessert, es verwendet jetzt die BASS syncs dafür
*LoadFromResource hinzugefügt
*LoadFromMemory hinzugefügt
*LoadFromStream in LoadFromBufferdStream umbenannt
*LoadFromStream neu eingeführt, die procedure lädt jett nichtmehr die ganze Datei in den Speicher
*Fehler im Speichermanagment behoben der einen Bluescreen verursachen konnte
*Mehrere Fehler mit AnsiString/String behoben

----09.12.2011 1.0
*Komplette überarbeitung der Klasse
*Aufteilung auf mehrere Klassen
*Events benötigen kein Application.OnIdle mehr
*Events müssen jetzt Thread-save sein
*Beispielprogramm erweitert
*Die GUI des Beispielprogramm verbessert
*Manche Sachen, besonders das Device handeling ist noch buggy.
*Recording geht noch nicht

----05.3.2011 1.1
*Output devices funktionieren jetzt, channeln können jetzt zur Laufzeit andere Ausgänge verwenden.
*Beispielprojekt verbessert um alle neuen Features zu verwenden.
*Viele Compiler Warnungen behoben

----31.8.2011 1.2
*Sehr viele Fehler behoben
*Mit Recordingunterstützung angefangen
*DeviceManager überarbeited und jetzt voll funktionsfähig
*BassCallbackSound hinzugefügt
Einloggen, um Attachments anzusehen!
_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht


Zuletzt bearbeitet von glotzer am Mi 01.08.12 19:11, insgesamt 45-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18724
Erhaltene Danke: 1627

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 18.05.11 06:04 
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
Die Klasse kapselt die "bass.dll" und ihre erweiterungen in einer einfach zu nutzenden Klasse.
Ja, sie ist sehr klein und dadurch für Einsteiger leichter zu verstehen als die großen Wrapperklassen, die teilweise auch nicht mehr für neuere Delphiversionen funktionieren.

Delphi habe ich gerade nicht zur Hand, deshalb kann ich es gerade nicht ausprobieren, aber der Aufbau der Klasse sieht gut aus. :zustimm:

user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
getested wurde nur mit Delphi XE, es sollte aber ohne Probleme bis Delphi 3 funktionieren,
Nein, dort wird es nicht gehen. Bei Delphi 5 fallen mir zwei Sachen auf:
ausblenden Delphi-Quelltext
1:
2:
  TBassSoundStatus = (BSS_STOPPED = 0, BSS_PLAYING = 1, BSS_STALLED = 2, BSS_PAUSED  = 3);
IncludeTrailingPathDelimiter
Werte für die Enumerationskonstanten vorzugeben, ging erst ab Delphi 6 oder 7.
Bei Delphi 5 gab es auch nur IncludeTrailingBackslash, da hat man noch nicht an andere Plattformen gedacht.
Mehr fällt mir da nicht auf, wenn man das ändert, sollte es kompilieren.

Bei Delphi 3 fehlen Int64, LongWord (ersetzbar durch DWORD, das gab es schon) sowie dynamische Arrays (CodingHistory) bereits in der bass.pas selbst. Zusätzlich gehen bei deinem Quelltext auch keine Standardwerte für Methodenparameter. Und IncludeTrailingBackslash gab es da noch gar nicht.

user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
prinzipiel sollte es auch mit Lazarus gehen.
Nein, denn implizite Pointer funktionieren so nicht und Rückgabewerte müssen auch bei der Implementierung der Methode angegeben werden. Wobei ich die fehlenden Rückgabewerte auch unter Delphi für extrem unsauber halte...
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function TBassSound.GetStatus;
begin

// ...
        for a := 0 to Info.formatc - 1 do
        begin
          // Filter erweitern
          Filter := Filter + Info.Formats[a].exts;
        end;
Die Pointer müssen bei Lazarus explizit geschrieben werden. Das mache ich im Übrigen auch bei Delphi so, damit man auch sieht, dass es welche sind:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
        for a := 0 to Info^.formatc - 1 do
        begin
          // Filter erweitern
          Filter := Filter + Info^.Formats^[a].exts;
        end;
Dennoch lässt sich beides nachahmen, wenn man in den Delphimode schaltet, denn sollte es ohne Änderungen gehen. Aber ich würde es lieber richtig schreiben.

Die bass.pas geht aber schon aufgrund dieses Konstrukts nicht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
const
  // special STREAMPROCs
  STREAMPROC_DUMMY : STREAMPROC = STREAMPROC(0);  // "dummy" stream
  STREAMPROC_PUSH  : STREAMPROC = STREAMPROC(-1); // push stream
Eine Funktionskonstante, die als Wert einen gecasteten Integerwert bekommt...

Das geht so gar nicht, auch nicht im Delphimodus. Da ich es gerade nicht testen kann, weiß ich nicht, ob es an der Stelle eine Alternative gibt.

Fazit:
Lazarus geht nur mit Änderungen an der bass.pas selbst, Delphi ab Version 5 mit kleinen Änderungen und ab Delphi 6 oder 7 ohne Änderungen.

Wie wäre es eigentlich, wenn du die dynamische Version der Bass-Unit unterstützt? Die liegt im Bass-Paket unter dynamic oder so und erlaubt die dynamische Einbindung der DLL, so dass man im Programm darauf reagieren kann, wenn diese nicht da ist, statt dass das Programm nicht startet.

Dafür fehlt im Grunde nur das Laden der DLL mit Load_BASSDLL und das Entladen mit Unload_BASSDLL, sowie die entsprechende Fehlerbehandlung. Und ich denke, dass das schon viele interessieren wird. :zwinker:
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Mi 18.05.11 16:38 
Danke für das Feedback,
klingt alles sehr gut, werd mich später mal drann setzen und es alles einbauen :D

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Mi 18.05.11 19:07 
Neue Version online, ich glaub ich hab alle Ideen von dir drinnen,
morgen bau ich dann noch die Tags ein, allerdings in einer abgeleiteten Klasse,
da ich die "Basisklasse" so klein wie möglich und aud fas wirklich nötigste reduzierrt lassen will.

Edit: fast, die pointer sind mir entgangen, das kommt in der nächsten Version.

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1083
Erhaltene Danke: 53

Win XP, Win7
Delphi 7 Enterprise, XE
BeitragVerfasst: So 22.05.11 00:40 
Find ich auch sehr gut!
Nur ne Frage, oder Vorschlag.
In Deiner
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
class procedure TBassSound.InitBass{$IFDEF DYNAMIC_BASS_LOAD}(const DLLName:String = 'bass.dll'){$ENDIF};
begin
....
....
....
   if not BASS_Init(-14410000nilthen    
    .....
....
.... 
end;

Gibt es keine Auswahlmöglichkeit, falls man 2 Soundkarten hat oder wenn man mehrere LP, also 7.1 ansteuern will.
Gut kann man auch selber noch machen, währe doch aber ein Futures wert 8)

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: So 22.05.11 01:10 
danke für das feedback, die idee klingt gut,
bei zeiten werd ich mich drumm kümmern

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
herr-master
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 31.05.11 18:19 
Schau dir den anhang mal an das ist eine dynamische bass.pas wo die bass.dll nicht benötigt wird.
Leider nicht für delphi xe angepasst sollte aber schnell gemacht sein.
Einloggen, um Attachments anzusehen!
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 31.05.11 18:39 
hmmmmm das sieht toll aus, hat nur leider ein paar Probleme:
das laden von Plugins ist damit nicht möglich,
bin mir nicht sicher ob es Probleme mit dem Copyright gibt.
aber ich werd mal schauen obs was wird.

Sorry das es mit den Updates so lange dauert, aber das real-life macht zurzeit viel Arbeit...

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
herr-master
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 31.05.11 18:45 
Das laden ist möglich nur muss man dan für fast jedes plugin eine dynamische pas erstellen was bei den ersten 5 - 8 plugins noch geht
bei bass_enc geht es leider nicht.
Da man erst die bass.dll vor allem anderen laden muss was die dllloader.pas leider nicht unterstützt.
Was ist mit bass_musicload willst du das noch einbauen?
Sonst sieht es sehr gut aus was du da erstellt hast.
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 31.05.11 19:11 
Mir ist noch nicht ganz klar wofür man bass_musicload eigentlich braucht.
Falls ich das noch rausfinde werd ichs entscheiden :p

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1083
Erhaltene Danke: 53

Win XP, Win7
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 31.05.11 19:19 
user profile iconglotzer hat folgendes geschrieben Zum zitierten Posting springen:
Mir ist noch nicht ganz klar wofür man bass_musicload eigentlich braucht.
Falls ich das noch rausfinde werd ichs entscheiden :p


Look en.wikipedia.org/wiki/MOD_(file_format)

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
herr-master
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 31.05.11 19:23 
Hier BASS_MusicLoad Loads a MOD music file; MO3 / IT / XM / S3M / MTM / MOD / UMX formats.
Diese formate werden oft in keyg..... oder pat.... benutzt , ich schreibe die zweich sachen nicht aus da ich glaube das verstößt hier gegen die forum regeln.Man kann diese sachen auch z.b benutzen wenn man beim start der mainform einen sound hören will oder im about da diese tracker nicht sehr groß sind und nur max 2 min lang sind.
Hm leider scheint mich deine unit nicht zu mögen ich bekomme bei diesem code hier immer eine zugriffsverletzungs msg zu sehen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.btnLoadClick(Sender: TObject);
begin
if dlgOpensong.Execute then
sound.LoadFromFile(dlgOpensong.FileName);

end;

procedure TForm1.btnPlayClick(Sender: TObject);
begin
sound.Play(False);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
sound.Create;
sound.InitBass();
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
sound.Free;
sound.DeInitBass;
end;

hier die meldung:
Erste Gelegenheit für Exception bei $7C812AFB. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004B7865 in Modul 'test.exe'. Schreiben von Adresse 0000000C'. Prozess test.exe (3824)


Zuletzt bearbeitet von herr-master am Di 31.05.11 19:59, insgesamt 2-mal bearbeitet
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 31.05.11 19:26 
Das klingt nicht so als ob es jemals irgendjemand brauchen würde :p
ich schau mal wieviel arbeit es wäre

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
herr-master
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 23.06.11 18:44 
Da musst du doch nicht viel anpassen wenn ich mir den source so anschaue.
Hier mal wie man es machen könnte:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TbassSound.MusicLoad(Path:Ansistring);
var
f:Pansichar;
begin
freeSound;
FFreeMemAfter := false;
f:=Pansichar(path);
handle:=BASS_MusicLoad(False,f,0,0,0{$IFDEF UNICODE} or BASS_UNICODE{$ENDIF},Nil);
if Handle = 0 then BassError(BASS_ErrorGetCode);
FSource:=BSSo_File;
end;
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Do 23.06.11 19:04 
yep das sieht gut aus :D irgendwann hat ich mal vor das ganze weiter zu entwickeln, aber zurzeit bin ich mit was anderen beschäftigt, wrd wohl noch ein bischen dauern

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Do 23.06.11 19:40 
gerade erst gesehen, sorry
user profile iconherr-master hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.btnLoadClick(Sender: TObject);
begin
if dlgOpensong.Execute then
sound.LoadFromFile(dlgOpensong.FileName);

end;

procedure TForm1.btnPlayClick(Sender: TObject);
begin
sound.Play(False);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
sound.Create;
sound.InitBass();
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
sound.Free;
sound.DeInitBass;
end;

hier die meldung:
Erste Gelegenheit für Exception bei $7C812AFB. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004B7865 in Modul 'test.exe'. Schreiben von Adresse 0000000C'. Prozess test.exe (3824)


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.btnLoadClick(Sender: TObject);
begin
  if dlgOpensong.Execute then
  sound.LoadFromFile(dlgOpensong.FileName);
end;

procedure TForm1.btnPlayClick(Sender: TObject);
begin
  sound.Play(False);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TBassSound.InitBass();
  sound := TBassSound.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  sound.Free;
  TBassSound.DeInitBass;
end;

ungetested, sollte aber gehen

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
herr-master
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Do 23.06.11 21:53 
Werde es gleich mal testen und das was ich hinzugefügt habe auch.Ich schaue mal ob ich sie für mich auch weiter entwickeln kann deine
klassenkapselung.
Weil wie gesagt ist recht gut aufgebaut und sehr leicht zu benutzen weitere sachen einzubauen sollte allso nicht so schwer sein.
Es geht allso so spielt die unit von glotzer(fastracker module ab)
ausblenden Delphi-Quelltext
1:
sound.musicload(opendialog.filename);					

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TbassSound.MusicLoad(Path:string);
var
f:Pchar;
begin
freeSound;
FFreeMemAfter := false;
f:=Pchar(path);
handle:=BASS_MusicLoad(False,f,0,0,0{$IFDEF UNICODE} or BASS_UNICODE{$ENDIF},0); //NIL ist hier falsch
if Handle = 0 then BassError(BASS_ErrorGetCode);
FSource:=BSSo_File;
end;

Und hier noch eine veränderung.
ausblenden Delphi-Quelltext
1:
357  Filter := 'mp3;*.mp2;*.mp1;*.ogg;*.wav*;*.aif;*.it;*.xm;*.mod,*.s3m';					

Und hier ein weiteres future von mir für diese unit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
//----Getcpu-------
function TbassSound.cpu:string;
begin
result:=FloatToStrF(BASS_GetCPU,ffFixed, 42) + '%';   //gibt an wie viel cpu verwendet wird.
end;
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Sa 27.08.11 01:32 
sooo, nach langer Zeit gibt es mal ein Update:

Zitat:

----20.08.2011 0.3
*Kleine Bugfixe
*Fehler in den Datumsangaben der Versionsgeschichte behoben
*Rückgabewert der funktion "InitBassPlugins" war fehlerhaft, jetzt gefixt
*Verbessete Lazaruskompatibilität
*CPU-Belastung durch Soundausgabe kann jetzt abgefragt werden

----26.08.2011 0.4
*Events "OnLoad", "OnPlay", "OnStop", "OnPause", "OnVolumeChange" hinzugefügt
*Kleine Fehlerbehebungen und Optimierungen
*Die Events "OnProgressChange", "OnEnd", "OnStatusChange" hinzugefügt, allerdings nur verfügbar wenn der Unit das Application.OnIdle event abfragen darf.


Zusätzlich gibt es jetzt auch ein Beispielprogramm.

Hat noch wer Ideen/wünsche was in die Klasse nach reinsollte? Wäre üver Feedback dankbar.

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
herr-master
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Sa 17.09.11 19:46 
Hm deine änderungen haben die basssound.pas er ruiniert da sie jetzt nicht mal mehr die sounds lädt.
Das ligt an dem raiseplay <-- raise ist ein fehler in delphi allso raise excption da hin kommt man doch erst wenn irgend wo im code raise exception auftritt.
Oder muss ich erst {$define HookAppIdleEvent} in meine form schreiben das er was abspielt.
Selbst deine sound test demo spielt kein sound ab.
Ich benutze die neuste bass.pas(2.4.8.1).
glotzer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Sa 17.09.11 20:02 
Das klingt irgendwie komisch. ich schau mir das in so einer stunde mal genau an. Hab grad keine Zeit.

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht