![]() |
bedarf des Arbeitsspeichers meiner Anwendung verringern
Hi Maximum-Coders, ( :dp: )
und schon bin ich da mit der nächsten Frage. Im Moment schreibe ich ein Programm, das eine art dienst ist. Nun ich habe bemerkt das meine Anwendung sich nicht unter 900K im Arbeitsspeicher drücken lässt. Zumindest nicht durch Code-optimierung. Das Programm benötigt keine Grafische Oberfläche! Nun kennt ihr eine Möglichkeit, eine Anwendung die nicht viel macht ausser warten und rückmeldungen zu geben (quasi so eine art scheduler) kleiner im Arbeitsspeicher zu kriegen als 500-400K ? Ich würde nur sehr ungern auf eine Service-Anwendung umsteigen, lieber eine "normale" exe die ich von meiner Anwendung aus, starten und abschießen kann wie ich will. greeez gabneo PS: ich habe mir das nonVCL demo von Asserbad(thx) mal angeschaut, aber das benötigt auch seine min. 980-1000K und mehr. |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Guten Morgen.
Du benötigst keine grafische Oberfläche? Der Grundbedarf für eine D7 Console Application ist 15KB. Dein Limit lässt sich mit etwas Fingerspitzengefühl auch noch mit einer Standard Service Application verwirklichen. Ich habe einen WatchDog Service mit 430KB im Einsatz. Der Großteil des Speicherbedarfs dürfte dabei auf das Konto der Unit Forms gehen, welche von der Unit SvcMgr importiert wird. Die Steuerung eines Dienstes von einer Anwendung stellt technisch kein Problem dar, dafür ist der Service Manager schließlich da. Ein Vorteil eines Dienstes ist ganz sicher, dass kein Benutzer angemeldet sein muss. Grüße vom marabu |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
@marabu: Es ist wohl der Bedarf an Arbeitsspeicher gemeint und nicht die Größe der Anwendungsdatei.
@gabneo: Der Bedarf an Arbeitsspeicher hängt unter anderem davon ab wie viel Speicher deine Anwendung zur Laufzeit alloziiert, also auch von den verwendeten Datenstrukturen, Objektinstanzen usw. Aber was sind an 900 KB so schlimm? Und vor allem was sind das für 900 KB? Realer Speicherverbrauch oder ist das der virtuelle Speicherverbrauch? Bei mir haben im Taskmanager gerade mal zwei Prozesse unter 800 KB realen Speicherverbrauch. |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Aber wenn das gesamte Code-Segment in den Arbeitsspeicher gepackt wird, dürfte die Größe der Anwendungsdatei ja auch eine Rolle spielen. Wobei ein Blick in den PE-Header immerhin schonmal sagen würde, wie groß welche Teile der Datei sind...
Und ich finds vorbildlich, daß es noch Programmierer gibt, die sich Gedanken zum Speicherbverbrauch machen :) Der klassische Speicherfresser auf den ersten Bytes ist eigentlich immer die Unit SysUtils. Allgemein würde ich sagen: nur sehr wenig Delphi-Klassen verwenden, sprich auch die RTL, nicht nur die VCL, so gut wie möglich meiden, und nur per WinAPI-Aufrufen arbeiten. |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
@marabu
genau, es geht um den speicherplatz des Arbeitsspeichers. Stimmt, das mit dem Dienst wäre von daher kein Problem, ich möchte aber nicht das der user die möglichkeit hat meinen Service zu starten/beenden ausser durch einen taskkill aus dem taskmanager raus, weil ich von meiner Hauptanwendung die exe stoppe sobald sie nicht mehr benötigt wird (->diese option wird vom user bestimmt, wenn er mein Program nicht mehr laufen lassen will). PS: eine Form, gibts gar nicht mehr, der code hängt ihn der Project.pas :angel2: @luckie Ich hatte gehofft das du dich meldest :dance: Schlimm ist daran eigentlich nichts, zumindest nicht solange man seine anwendung im rahmen hält. Es geht hierbei einfach darum, das die software die ich schreibe meinen Ansprüchen genügt^^ und ich ärgere mich immer über Programme die im arbeitsspeicher rumhängen und ihre fiesen scheduler mitbringen (z.b. teilweise schlechte antiviren-software die den Rechner so lahmt das man keinen virus mehr braucht um nicht mehr arbeiten zu können, das erledigt dann schon die av-software). Und ich möchte einfach das, dass ding läuft und man nebenbei in seelenruhe zocken kann (was man jetzt schon kann, ich wills halt auf die spitze treiben.). Nun auf jeden fall muss das teil kleiner werden (wenn es geht). Ich glaube mit realem Arbeitsspeicher meinst du den derzeit verwendeten arbeitsspeicher? Im taskman. hat die anwendung bei mir 890K. Ich nehme an das windows alle nichtbenötigten dll´s ausgelagert hat, weil bei einem showmessage bläst die Anwendung auf über 1000K auf -> dll wird da wohl nachgeladen. Ich habe bereits versucht durch umstellen auf nonVCL, oder durch auslagern der teile die ich ich aus den Komponenten der uses liste benötige, die Anzahl der genutzten Komponenten zu verringern und es hat so gut wie nichts (<2K) gebracht. Insgesammt alloziere ich direkt im Sourcecode vielleicht 25 variablen. Nun ich habe Vista, und da sind insgesammt 11 Prozesse unter 700K. zum beispiel falls du die software namens Ultramon für mehrdisplay-systeme kennst, die hat bei mir dauerhaft gerade einmal 276K belegt. Und die haben grafische Fenster usw. Ich verstehe nicht wie die das so klein gekriegt haben... @ CCRDude Die größe der Exe spielt eher weniger ne rolle, 500GB platten gibt es für 110€ aber 1GB guter Arbeitsspeicher kosten teilweise 150€. Da kann ich ruhig die 452,01KB festplattenspeicherplatz nutzen die meine exe hat, aber nicht 1000K arbeitsspeicher, das ist einfach zu viel für meine ansprüche, wenn andere es doch auch niedriger mit aufwändigerer software schaffen (Ultramon) schaffen. Zu dem Tip mit Winapi -> vielen dank, aber lies meinen kommentar zu luckie...alles schon getestet. ================================= Also aus dem text ergibt sich^^ : Wie kriegen denn das all die anderen guten Programme hin? Vielen Dank für die Hilfe!!!! greez |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Ich glaub umgekehrt Du hast mich nicht ganz verstanden ;)
In deinem Kommentar zu Lucky und deinem ersten Betriag steht nur, daß Du "nonVCL" ausprobiert hast; ich meinte aber, die API direkt auch als Alternative zur RTL (nicht nur zur VCL) zu verwenden! Ehrlich gesagt frage ich mich aber sowieso, wieso Du von nonVCL sprichst, wenn es um ein Programm ohne Oberfläche geht, dann da macht VCL vs. "nonVCL" doch keinen Unterschied, schließlich brauchst Du weder noch. Und zur Größe der Anwendungsdatei: ich sprach durchaus nicht von Preisen für Festplattenplatz :P sondern davon, daß die Größe auf der Platte in einem bestimmten Verhältnis zur Größe im Speicher steht. Wenn Du mal in die Dokumentation des PE-Formats schaust, wirst Du sehen, daß/wie beim Starten einer Anwendung diverse Teile der Datei wo & wie in den Speicher kopiert werden. Ob da was zu Optimieren ist, hängt vom einzelnen Fall ab. Für mehr hab ich jetzt leider genauso wenig Zeit wie Du, durchzulesen was ich wirklich geschrieben hab, muss mal wieder an die Arbeit ;) |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
@CCRDude
ups, sorry...das hab ich nicht ganz gecheckt. im nachhinein liest sich das was ich geschrieben habe so "schnippisch" war nicht so gemeint, wollte es einfach nicht 2mal schreiben^^. Da hast du natürlich recht, das die größe im arbeitsspeicher mit der größe auf der Festplatte gekoppelt ist, das ist mir ja bewusst. Ich meine nur das meine priorität nicht daurauf liegt, die Anwendungsgröße zu schmälern (sekundär) sondern den benötigten Arbeitsspeicher zu verringern (primär). Ob durch das verbessern des einen das andere sich ändert.....umso besser. Zu nonVCL muss ich dazusagen, das ich es getestet habe zu einer zeit, als ich noch eine visuelle rückgabe gebraucht habe. Alles was ich sagen wollte ist, ich brauche sie nicht mehr (die form), was aber nichts an der tatsache ändert, das sich ob VCL genutzt oder nicht keine änderung im Verbrauch des Arbeitsspeichers ergibt. @all Daher die Frage, warum ist eine Anwendung wie Ultramon und viele weitere Anwendungen so klein(?), wenn nichts was ich meines wissens beeinflussen kann, die größe im Arbeitsspeicher verringert? Auf irgendwas verzichten die, was ich drin habe... :stupid: greez und thx für die antworten :dp: |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Das könnte zum Beispiel in Assembler programmieren, oder z.B. auf hilfreiche aber auch über die WinAPI direkt realisierbare Funktionen aus der RTL verzichten...
Beispiel: ich wollte ein Mini-Update, um etwas in der Registry zu verändern. Mit TRegistry und SysUtils bin ich nicht unter 100 KB gekommen; hab ich die Reg*-Funktionen direkt benutzt, war die Datei nur noch 15 KB groß. Oder, ich glaub IntToStr aus SysUtils wars: verwendet man das, blähen sich plötzlich 300 KB dazu, einfach so (weil IntToStr so geschickt mit allem möglichen anderen verwoben ist... wobei IntToStr jetzt nur ein Beispiel ist, kann auch was anderes gewesen sein). Dann gibts glaub ich irgendwo noch ne inoffizielle Version der SysUtils, die wesentlich kleiner sein soll. Und Du sagst, du brauchst eine Form nicht mehr. Heißt das denn, daß sie noch im Code irgendwie vorhanden ist? Dann kostet leider alleine das schon Größe, selbst wenn sie nicht benutzt wird. Und zur Datei selber... schraubt man ein bißchen an diversen PE-Parametern, kann man auch noch ein paar KB rausholen. Wobei das, wenn es Dir um 500 vs. 900 KB als Beispiel geht, nicht wirklich viel bringt (eher ganz wenige KB). |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Wie beschrieben hängt alles in der Project.pas...keine forms mehr :mrgreen:
Das mit den SysUtils ist ein cooler Tip. Vielen Dank. Ich benutze nur ein paar Funktionen daraus. Ich werde mal schauen ob das große Veränderungen auf die Größe im Arbeitsspeicher hat. Wie kann ich den die PE-Parameter beeinflussen? Und wie kriege ich Windows dazu bestimmte teile wieder aus dem Arbeitsspeicher auszulagern? Bis dahin, Vielen Dank für deine/eure hilfe. greez gabneo |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Moin gabneo,
Zitat:
Zumindest unter XP ist die Allocation Granularity (siehe GetSystemInfo) 64Kb, dass heisst, wenn Speicher beim System angefordert wird (per VirtualAlloc), wird auf jeden Fall ein 64Kb grosser Block zugewiesen. Den kann man dann, in Pagesize-Schritten (i.d.R. 4Kb) belegen. Es könnte gut sein, dass der Taskmanager nur den Speicher anzeigt, der den Typ MEM_COMMIT hat, und nicht was nur MEM_RESERVED hat, auch wenn dieser Speicher dem System nicht mehr zur Verfügung steht. Speicher kann drei Stati haben: free, reserved, commited free kann von jedem der es anfordert belegt/angefordert werden. reserved sind die Speicherbereiche, die erst einmal angefordert wurden, so dass sie dem System nicht mehr zur Verteilung zur Verfügung stehen, sondern von einem Prozess reserviert wurden. commited sind die Speicherseiten, mit denen ein Prozess arbeiten (schreiben / lesen) kann. Mit diesem Codeschnipsel kannst Du ermitteln, wieviel Speicher für Dein Programm reserviert ist:
Delphi-Quellcode:
Wenn Du statt GetCurrentProcessId die Prozess-Id eines anderen Prozesses nimmst, solltest Du die Werte des Prozesses bekommen.
var
hProc : DWORD; pMemStart : Pointer; dwRead : DWORD; mbi : MEMORY_BASIC_INFORMATION; dwTotalSize : DWORD; dwCommittedSize : DWORD; begin hProc := OpenProcess(PROCESS_ALL_ACCESS,true,GetCurrentProcessId); if hProc = 0 then exit; try dwTotalSize := 0; dwCommittedSize := 0; pMemStart := nil; dwRead := VirtualQueryEx(hProc,pMemStart,mbi,SizeOf(mbi)); while dwRead = SizeOf(mbi) do begin if mbi.State = MEM_COMMIT then begin Inc(dwCommittedSize,mbi.RegionSize); Inc(dwTotalSize,mbi.RegionSize); end; if mbi.State = MEM_RESERVE then begin Inc(dwTotalSize,mbi.RegionSize); end; pMemStart := Pointer(DWORD(mbi.BaseAddress)+mbi.RegionSize); dwRead := VirtualQueryEx(hProc,pMemStart,mbi,SizeOf(mbi)); end; finally CloseHandle(hProc); end; ShowMessage('Committed: '+IntToStr(dwCommittedSize div 1024)+#13#10+'Total: '+IntToStr(dwTotalSize div 1024)); end; Unter Vista wirst Du wahrscheinlich für die Zugriffsrechte auf einen fremden Prozess PROCESS_QUERY_INFORMATION angeben müssen Ersatzweise könntest Du Dir auch mal den ProcessExplorer von Sysinternals ( ![]() Ausserdem kannst Du natürlich auch noch ein bisschen weiter mit den verschiedenen Bestandteilen von MEMORY_BASIC_INFORMATION "herumspielen", um verschiedene Informationen zum Speicher zu erhalten. |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Super,
danke dir für den Tip :thumb: . Ich hatte Process-explorer auf meiner platte, aber reinschauen hat geholfen, na manchmal sieht man halt den wald vor lauter Bäumen nicht. Ich konnte das Problem nun eingrenzen. Das Problem ist, das die Komponenten die man verwendet dll´s beim starten der Kompilierten Exe mit in den Arbeitsspeicher reinladen. Dazu kommt die Liste an dll´s die einem von Windows aufgezwungen werden. In der Summe sieht das unter Vista dann so aus: (RTSUltraMonHook.dll ist natürlich eine fremd-dll für einen systemhook von einer anderen Anwendung, äußerst interessant das windows meine applikation "zwingt" diese mitzuladen :roll: )
Delphi-Quellcode:
Die meisten Anwendungen benutzen hier schon alleine doppelt so viele dll´s wie mein "scheduler", also schon mal ein grund zur Freude!
Process: meinscheduler.exe Pid: 3524 //bei meiner beispielanwendung
Name Description Company Name Version advapi32.dll Erweiterte Windows 32 Base-API Microsoft Corporation 6.00.6000.16386 aero.msstyles Ressourcen-DLL für visuellen Stil "Windows-Aero" Microsoft Corporation 6.00.6000.16386 clbcatq.dll COM+ Configuration Catalog Microsoft Corporation 2001.12.6930.16386 comctl32.dll Bibliothek für Steuerelemente Microsoft Corporation 5.82.6000.16386 comctl32.dll Bibliothek für Steuerelemente Microsoft Corporation 6.10.6000.16386 comctl32.dll.mui Bibliothek für allgemeine Steuerelemente Microsoft Corporation 5.82.6000.16386 gdi32.dll GDI Client DLL Microsoft Corporation 6.00.6000.16386 imm32.dll Multi-User Windows IMM32 API Client DLL Microsoft Corporation 6.00.6000.16386 kernel32.dll Client-DLL für Windows NT-Basis-API Microsoft Corporation 6.00.6000.16386 locale.nls locale.nls lpk.dll Language Pack Microsoft Corporation 6.00.6000.16386 msctf.dll MSCTF-Server-DLL Microsoft Corporation 6.00.6000.16386 msvcrt.dll Windows NT CRT DLL Microsoft Corporation 7.00.6000.16386 ntdll.dll DLL für NT-Layer Microsoft Corporation 6.00.6000.16386 ole32.dll Microsoft OLE für Windows Microsoft Corporation 6.00.6000.16386 oleaut32.dll Microsoft Corporation 6.00.6000.16386 propsys.dll Microsoft-Eigenschaftensystem Microsoft Corporation 6.00.6000.16386 rpcrt4.dll Remoteprozeduraufruf-Laufzeitumgebung Microsoft Corporation 6.00.6000.16386 RTSUltraMonHook.dll Hook DLL for Realtime Soft UltraMon Realtime Soft 2.07.0001.0000 RTSUltraMonHookRes.dll UltraMon Resource DLL Realtime Soft 2.06.0023.0003 secur32.dll Security Support Provider Interface Microsoft Corporation 6.00.6000.16386 setupapi.dll Windows Setup-API Microsoft Corporation 6.00.6000.16386 shell32.dll Allgemeine Windows-Shell-DLL Microsoft Corporation 6.00.6000.16386 shlwapi.dll Shell Light-weight-Dienstprogrammbibliothek Microsoft Corporation 6.00.6000.16386 meinscheduler.exe user32.dll Multi-User Windows USER API Client DLL Microsoft Corporation 6.00.6000.16438 user32.dll.mui Multi-User Windows USER API Client DLL Microsoft Corporation 6.00.6000.16386 userenv.dll Userenv Microsoft Corporation 6.00.6000.16386 usp10.dll Uniscribe Unicode script processor Microsoft Corporation 1.626.6000.16386 uxtheme.dll Microsoft UxTheme-Bibliothek Microsoft Corporation 6.00.6000.16386 version.dll Version Checking and File Installation Libraries Microsoft Corporation 6.00.6000.16386 Allerdings kann ich die Anzahl der geladenen dll´s durch Hardcore freigabe :zwinker: :stupid: ala
Delphi-Quellcode:
nicht reduzieren. Übrigens hatte das killen der dll, nur auswirkungen auf meine Applikation, was beweist das die geladenen dll´s extra zu meiner runtime exe zugeladen werden.
Quelle: [url]http://www.swissdelphicenter.ch/torry/showcode.php?id=1202[/url]
...remove a Dll from memory? Author: Michael Wiren function KillDll(aDllName: string): Boolean; var hDLL: THandle; aName: array[0..10] of char; FoundDLL: Boolean; begin StrPCopy(aName, aDllName); FoundDLL := False; repeat hDLL := GetModuleHandle(aName); if hDLL = 0 then Break; FoundDLL := True; FreeLibrary(hDLL); until False; if FoundDLL then MessageDlg('Success!', mtInformation, [mbOK], 0) else MessageDlg('DLL not found!', mtInformation, [mbOK], 0); end; Diese wurde nach dem killen einiger dll´s ziemlich klein. Also wird die Lösung des Dilemma´s wohl darin liegen, das ich Windows per API dazu bringe, den wie du sagtest MEM_COMMIT zu freen. So in etwa, wie das diese ganzen Arbeitsspeicher-freiräum tools machen, nur halt für eine=meine Anwendung. Wie das genau gehen soll, weiß ich noch nicht, den um eine saubere Lösung hinzukriegen gilt es bei solchen sachen immer viel abzuwägen. Was hältst/haltet du/ihr von dieser beweiskette? Übrigens Vielen Dank für die Hilfe! greez gabneo |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Zitat:
|
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Einfach, weil ich mich mit der API einfach nicht so gut auskenne, als das ich komplett auf die Delphi Komponenten Verzichten möchte.
Da sag ich doch: "Lieber den spatz in der hand, als die Taube auf dem dach." greez |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Dann lerne es doch, schau Dir Tutorials an und fang einfach an. Wenn Du etwas erreichen willst, dann musst du auch was dafür tun.
Mit VCL geht es eben nicht. Punkt. |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Ok,
vielen dank. Mir geht es immer noch um die Größe im Arbeitsspeicher und die lässt sich in meinem derzeitigen Exe-Status dadurch reduzieren indem ich dll´s freigebe! Und nicht durch WinAPI tutorials. Sorry aber was ich da oben schreibe macht sinn, und ich bin ganz und gar nicht zu faul um was zu lernen. Mag sein das das zuviel text ist ums durchzulesen, aber da steht alles drin und das thema hat länger nix mehr mit VCL etc. zu tun, da ich Funktionen aus der VCL benutze die nur mit einem sehr großen aufwand sich durch eine reine WinAPI version ersetzen lassen. Wer hat schon lust etwas was fertig ist und funktioniert in 1 1/2 Wochen (oder was weiß ich) neuzubauen = das rad neu erfinden? Also...bitte lass mich einfach meine dll frage stellen denn mit Zitat:
greez gabneo PS: Ich will damit nicht schnippisch oder sonstwie klingen. Also nix für ungut! |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Die VCL verwendet er ja auch nicht ;) (edit: hat er ja inzwischen auch geschrieben)
Das "Problem" mit dem Entladen dieser DLLs ist: die brauchst Du ja! Zumindest wahrscheinlich zu großen Teilen. Weißt es nur noch nicht ;) Die RTL von Delphi benutzt halt diverse Funktionen aus diesen DLLs. Wenn Du einfach hingehst und einige DLLs entlädst, weißt Du nie, welche Funktionen gerade zufällig davon abhängen... besser also, dafür zu sorgen, daß sie von vorneherein gar nicht erst geladen werden! Z.B.sehe ich da comctl32.dll und gdi32.dll ... das deutet darauf hin, daß irgendwo noch eine Unit eingebunden ist, die doch noch etwas grafisches veranstalten will. Das kann irgendwo Code sein, der rein theoretisch noch ein MessageBox aufrufen könnte z.B., oder irgend eine indirekt damit zusammenhängende Unit. Ich etwa hab gerade noch einmal in einigen meiner Kommandozeilenprogramme nachgeschaut: einmal MessageBox plus AppEvents für irgendne Konstante eingebunden ergibt stolze 300 KB mehr (und hat auch den statischen Import jener DLLs bewirkt). Aber nochmal vorsichtshalber: die DLLs entladen ist relativ heikel und hat eher zweifelhafte Erfolge... nutze sie besser als Indiz dafür, wo noch unnötiger Code mit einkompiliert wird. Als Anleitung dafür etwa kannst Du auch ein Programm nehmen, daß anzeigt, welche Funktionen aus diesen DLLs importiert werden (wenns der ProcessExplorer nicht macht, dann z.B. der FileAlyzer). Und wenn Du dann die völlig unnötige Funktion ImageList_Add aus comctl32.dll importiert siehst, suchst Du mal die RTL/VCL-Unit, die diese Funktion importiert, versuchst herauszufinden über welche Umwege diese auch in Dein Projekt eingebunden ist und ob Du diese Abhängigkeit nicht lösen kannst (zwar "kostet" der Import selber nichts, aber diese Unit kann halt jede Menge unnötigen Code mitkompilieren). |
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Zitat:
Und überhaupt VCL/RTL/SAT 1 wo ist da der Unterschied? :mrgreen: Zitat:
Ich würde einfach mal die Uses-Liste komplett wegstreichen (außer die die eigenen Units) und dann schauen, wo es klemmt. IntToStr etc. lassen sich sehr einfach selbst programmieren (wenn's denn daran liegt). Wenn Du die VCL/RTL Sourcen hast, dann kannst Du das Projekt ja mal mit dem Suchpfad kompilieren und per F7 durchsteppen. Anfangs werden ja alle eingebundenen Units initialisiert. Dann siehst du auch, was so alles dazugepackt wird... Wie gesagt: Möglichkeiten gibts Viele.. Zitat:
|
Re: bedarf des Arbeitsspeichers meiner Anwendung verringern
Vielen Dank euch beiden.
Der Filealyzer hats gebracht. Bisher konnte mir kein tool wirklich zeigen, was ich mitcompiliert habe. Doch nun kann ich eindeutig die genutzten DLL´s und die daraus genutzten Funktionen sehen, aus denen ich nur 1-2 Funktionen brauche. Jetzt weiß ich wo ich hinlangen muss. also thema erledigt. thx + greez gabneo :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz