![]() |
Re: Windows 7 Support für Delphi [ALPHA 1]
Nein, die Anwendung läuft nicht mit Adminrechten.
Ich stehe jetzt leider nicht so in Windowsmessages drin, aber ich äußere mal meine Mutmaßungen / Bastel-Ergebnise: Wenn das Fenster minimiert ist wird in "procedure TdwTaskbarWindowsEntry.DoWMActivate;" durch ein "if Application.MainForm.WindowState = wsMinimized then" überprüft, ob die anwendung minimiert ist. Leider ist (hier,seltsamerweise) WindowState = wsNormal, sodass die nächste anweisung nicht ausgeführt wird. Die Zeile "(Collection as TdwTaskbarWindowsCollection).FOwner.DoActivateWind ow(Self.Index);" wird anscheinend normal ausgeführt. Das Fenster verbleibt aber im Hintergrund. (Fehler in der Demo ,Bedienerfehler meinerseits oder der Komponente ?) Ist das Fenster geöffnet wird nie ein WM_ACTIVATE ausgelöst, sodass auch kein Tab in den Vordergrund kommt. Ein Auskommentieren von "if Application.MainForm.WindowState = wsMinimized then" bewirkt, das das Programm (wenn es minimiert ist widerhergestellt wird und die gewähleten Tabs einmal geöffnet werden. Vieleicht kann mal jemand der mehr Ahnung von der Sache hat drübergucken... |
AW: Windows 7 Support für Delphi [ALPHA 1]
Download geht nicht mehr: "Page not found"
Weiß jemand, wo man sich das noch runterladen kann? Ich würd mir das ja gern mal anschauen. |
AW: Windows 7 Support für Delphi [ALPHA 1]
|
AW: Windows 7 Support für Delphi [ALPHA 1]
Super Komponente. Gefällt mir echt gut.
Aber gibt's dafür irgendwo eine Doku? Hab jedenfalls keine gefunden. Woraus sich für mich dummerweise 2 Probleme ergeben. 1. Ich krieg die Fortschrittanzeige in der Taskbar irgendwie nicht hin. Such grad im Demoporgramm wie das wohl geht. 2. In der dwProgressBar müßte man ja auch diese nachlaufende Farbänderung innerhalb des grünen Balkens haben (k.A. wie man das nennt). Krieg ich aber auch nicht hin. Auch hier such ich im Demoprogramm. Steinigt mich, weil ich zu blöd oder zu blind bin. Aber bindet an einen Stein bitte die Lösung ;-) |
AW: Windows 7 Support für Delphi [ALPHA 1]
Schau dir doch den entsprechenden Code-Teil in der Demo an :)
mfg Florian |
AW: Windows 7 Support für Delphi [ALPHA 1]
Hab ich versucht.
Ich hab eine dwProgressBar und dwTaskbarWindow auf meiner Form. Dann hab ich in dwTaskbarWindow einen dwTaskbarWindowEntry und dessen Eigenschaft Control auf dwProgressBar. So hab ich mir das mal aus den Fingern gesaugt. Während des Fortschritts der dwProgressBar rufe ich dann dwTaskbarWindows1.TaskbarWindows[0].UpdateTaskbarWindow auf. Vielleicht stell ich mir das zu einfach vor. Aber ohne Doku muß man ja irgendwie anfangen. Und was mein anderes Problem angeht (mit der nachlaufenden Farbhervorhebung in dem grünen Balken (ich weiß leider immer noch nicht wie man das nennt)), eben weil ich nicht weiß wie das heißt find ich keine Eigenschaft, wo man das einstellen könnte. Oder muß man das selber anstoßen? Auch hier fehlt mir wieder die Doku. Das Demo kann ich leider nur als Exe laufen lassen. Selbst kompilieren kann ich es ohne Veränderungen leider nicht, weil ich nur D7 habe. Dazu müßte ich Komonenten neu machen. Nur will ich ja an der Demo möglichst nichts ändern. |
AW: Windows 7 Support für Delphi [ALPHA 1]
Zur zweiten Frage: Das Dingen heißt Marquee.
Für Frage 1 hab ich jetzt auch keine Antwort, da ich hier kein Delphi hab. Schöne Grüße, Florian |
AW: Windows 7 Support für Delphi [ALPHA 1]
Hi,
für die Progressbar in der Taskleiste musst du die Komponente TdwTaskbarProgressIndicator benutzen. Die Eigenschaft ShowinTaskbar musst du auf true stellen und über Position kannst du halt die Position einstellen. Wenn das Ding sich ohne eine Position anzuzeigen einfach nur bewegen soll musst du die Eigenschaft Progressbarstate auf pbstMarquee stellen. Ich hoffe ich konnte helfen. |
AW: Windows 7 Support für Delphi [ALPHA 1]
Zitat:
Bei dem Marquee-Effect habt ihr mich wohl falsch verstanden. Ich will nicht, dass ein grüner "Impuls" auf der Taskbar hin und herschwingt (wie bei Aktionen, denen Dauer nicht genau zu bestimmen ist) sondern genauso, wie beim Kopieren im Explorer von W7/Vista. Wo als mit dem grünen Balken ganz normal der Fortschritt angezeigt wird, aber eben auf dem grünen Bereich eben so ein kleiner Farbimpuls stetig hinterherläuft (ist halt nur so ein kleiner grafischer Gimmik). |
AW: Windows 7 Support für Delphi [ALPHA 1]
Verwendest du die Komponenten in einer VM oder hast du Aero aus?
|
AW: Windows 7 Support für Delphi [ALPHA 1]
Zitat:
Unter Windows 7 mit Aero. Und bei anderen Programmen (Kopieren unter Windows oder Download im IE) funktioniert das wunderbar. Deswegen denke ich ja auch, dass der Fehler eigentlich bei mir liegen müßte. Mach gleich mal ein Demoprojekt, wo ich nur genau diese Funktion verwenden. Wenn's damit auch nicht geht, poste ich das mal. Dann könnt ihr euch das mal anschauen. |
AW: Windows 7 Support für Delphi [ALPHA 1]
Zitat:
Vielleicht hilft das schon weiter. Greez, Chris |
AW: Windows 7 Support für Delphi [ALPHA 1]
Liste der Anhänge anzeigen (Anzahl: 2)
Also ich hab jetzt mal ein Demoproject gemacht, lediglich mit eine dwProgressbar, dwTaskbarProgressIndicator, Timer, Button.
Geht leider auch nicht. Das mit dem Marquee hat sich geklärt. Liegt wohl daran, dass in meinem Originalprojekt zum Zeitpunkt des Fortschrittes eine sehr hohe Prozessauslastung da ist, trotz application.processmessages. Aber das mit dem TaskbarProcessbar geht bei mir nicht. Aber bei anderen Programm. Siehe hardcopy.jpg Ich hab mein demoprojekt mal angehängt. Meine kompiliete Exe ist auch dabei. Wer mag, kann ja mal ausprobieren, ob die bei ihm richtig funktioniert. Oder halt den Quellcode selber kompilieren. |
AW: Windows 7 Support für Delphi [ALPHA 1]
5 mal runtergeladen und keiner kann sagen, ob bei ihm die TaskbarProgressbar mit dem Code funktioniert?
|
AW: Windows 7 Support für Delphi [ALPHA 1]
Funktioniert nicht (Windows 7 + Aero; bei anderen Programmen funktioniert das mit der Taskbar).
mfg Florian |
AW: Windows 7 Support für Delphi [ALPHA 1]
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal den TaskbarProgressIndicator abgeändert, so dass man ihm einfach nur ne TProgressBar geben muss, die dann in der Taskbar angezeigt wird.
Ist noch nicht 100% durchgetestet, aber funktioniert größtenteils. :wink: |
AW: Windows 7 Support für Delphi [ALPHA 1]
Soviel ich weiss, ist MPL nicht kompatibel mit GPL, ich bin zwar kein Anwalt, aber vllt solltest du wegen der Klarheits willen nur eine Lizenz wählen.
|
AW: Windows 7 Support für Delphi [ALPHA 1]
Eben weil die beiden nicht kompatibel sind, bietet sakura hier eine Mehrfach-Lizenz an. Das ist auch gar nicht so unüblich - dadurch kann man den Code sowohl in GPL- als auch in MPL-Projekten nutzen. :D
|
AW: Windows 7 Support für Delphi [ALPHA 1]
Download geht nicht mehr :(
Wo sind die Leute, die externe Verlinkung anprangern, wenn man sie wirklich braucht? :lol: Sherlock |
AW: Windows 7 Support für Delphi [ALPHA 1]
Zitat:
![]() gleich der erste Eintrag: ![]() |
AW: Windows 7 Support für Delphi [ALPHA 1]
Ui, Danke. Ich bin zwar da drauf gewesen, aber ich war nur auf der Seite zu den Komponenten....und, was soll ich sagen? War zu faul weiter zu suchen. Mea culpa :)
Sherlock |
AW: Windows 7 Support für Delphi [ALPHA 1]
Hallo
ich habe deine Thumbnails-Komponente zu meinem Projekt hinzugefügt. Muss man da noch zusätzlich aktivieren oder dem Projekt hinzufügen? Bei WinXP (ja ich weiß, es ist sinnlos... war aber nur zu Testzwecken) bekam ich keinerlei Fehlermeldungen. Als ich das gleiche Projekt dann bei einem Win7 Laptop ausprobiert habe, bekomm ich erst eine Nachricht "Das Programm funktioniert nicht mehr" wenn man dann abbricht Zugriffsverletzungen. Diesen Code habe ich noch hinzugefügt
Delphi-Quellcode:
kannst du mir sagen woran das liegt?
procedure TFrmMain.ThumbsWin7ThumbnailClick(Sender: TdwTaskbarThumbnailItem);
begin case Sender.Index of 0: showmessage('A'); 1: showmessage('B'); end; end; In der Hoffnung das du mir helfen kannst. MfG Chillkröte edit: jetzt kommen keine fehlermeldungen mehr, die buttons bleiben aber verborgen. Am Code habe ich nichts verändert! |
AW: Windows 7 Support für Delphi [ALPHA 1]
Guten Morgen,
ich erstelle ein MDI Child und verwende dann folgenden Code:
Delphi-Quellcode:
Die Taskbarwindows werden erzeugt, aber...
Win7TaskBarWindow.DeactivateTaskWindows;
Win7TaskBarWindow.TaskbarWindows.Clear; with Win7TaskBarWindow.TaskbarWindows.Add do begin Caption := Self.MDIChildren[i].Caption; WinControl := Self.MDIChildren[i]; end; Win7TaskBarWindow.UpdateAllTaskbarWindows; if Win7TaskBarWindow.TaskbarWindows.Count > 0 then Win7TaskBarWindow.ActivateTaskWindows; 1. Die MDI Childs enthalten ein TPageControl. Alle Controls die dort drauf sind werden nicht mit gezeichnet. 2. Das OnActivateTab funktioniert mit MDI Child Fenstern nicht. Das Event wird gar nicht ausgelöst. Außerdem habe ich schon in TdwTaskbarWindowsEntry.DoCreatePreview(Message: TMessage) folgende Zeilen geändert:
Delphi-Quellcode:
Das while war erst:
Parent := WinControl.Parent;
while (Parent <> nil) and (Parent.Parent <> nil) do begin Pt := Parent.ClientToParent(Pt, Parent.Parent); Parent := Parent.Parent; end; DwmSetIconicLivePreviewBitmap(ProxyHandle, PreviewArea.Handle, @Pt, 0);
Delphi-Quellcode:
Da aber ein MDI Child keinen Parent hat... Bummm!
while (Parent.Parent <> nil) do
Hat jemand diese Compos schon mal mit MDI Child Fenstern eingesetzt? Gibt es sonstige Hinweise? Danke im Voraus. |
AW: Windows 7 Support für Delphi [ALPHA 1]
Keiner eine Idee? Oder hat noch niemand versucht einzelne MDI Childs mit dieser Komponente in der Win7 Taskbar anzuzeigen?
|
AW: Windows 7 Support für Delphi [ALPHA 1]
Hallo zusammen,
und erstmal ein Lob an sakura für die Komponenten. Ich benutze zur Zeit die ProgressBar und OverlayIcon in meiner Anwendung, weil ich den Updatefortschritt auch in der Taskbar anzeigen will. Funkt nach langem fummeln auch mit Thread usw. Habe mir zum Testen auf eine Virtuele Maschine unter XP, die 90 Tage Testversion von Win7 Enterprise gezogen, damit ich mein Programm testen kann. So nun hab ich Win7 SP 1 installiert und jetzt hab ich dauerthaft ein Schild bei der Anwendung (wegen ProgramFile Ordner brauch ich Adminrechte beim Update). Nun ich bekomms net mehr weg (bin neu in Win7 also bitte nicht gleich erschlagen :oops:). Um auf den Punkt meines Problems zukommen: Durch das Update hab ich das Schild-Icon auch als Overlay-Icon in der Taskbar. Nun zeichnet die Overlay-Kompenente das andere darauf. Ist das normal? Weil ich find es ein bischen blöd wenn ich mit der Kompenente das Overlay Icon ändern will, aber es nur auf das Schild-Icon draufgezeichnet wird. (Davor hatte ich es noch nicht, da gings wunderbar :-D) @sakura: Ich wies net ob das geht, aber ist es Möglich das du das Icon ersetzt, solang der ImageIndex in der Overlay-Kompenente > -1 ist und dan wieder zurücksetzt?Also in meinem Fall das Schild wieder hinkommt? |
AW: Windows 7 Support für Delphi [ALPHA 1]
Der Downloadlink ist leider tot. Wäre jemand so lieb und würde die Komponente bereitstellen?
Grüße |
AW: Windows 7 Support für Delphi [ALPHA 1]
Liste der Anhänge anzeigen (Anzahl: 1)
In der Hoffnung das Richtige gefunden zu haben:
|
AW: Windows 7 Support für Delphi [ALPHA 1]
Ansonsten kann man sich die hier auch einmal ansehen:
![]() |
AW: Windows 7 Support für Delphi [ALPHA 1]
Hallo nochmal,
Mal ne frage...es ist doch möglich mit der Taskbar Unit, auch das für nonvcl zumachen oder? Weil ich wollte das mit der Taskbarprogressbar in NonVCL verwenden. EDIT: Ich habe es soweit hinbekommen das er es mir anzeigt. Hingegen bekomm ich beim schliessen einen Zugriffsverletzung auf adresse 000000 (d.h. auf ein bereits freigegeben Pointer) Ich vermute es liegt am dem Form das früher freigegeben wird als die ProgressBar in der Taskleiste. Nur wie gebe ich die davor frei bzw. wann? und wo? Benutze Delphi2009/Delphi2010
Delphi-Quellcode:
program metroupdate;
uses SysUtils,messages, windows, classes, CommCtrl, xpman, ComObj; type ULONGLONG = UInt64; TTipString = array[0..259] of WideChar; PTipString = ^TTipString; tagTHUMBBUTTON = packed record dwMask : DWORD; iId , iBitmap : UINT; hIcon : HICON; szTip : TTipString; dwFlags : DWORD; end; THUMBBUTTON = tagTHUMBBUTTON; THUMBBUTTONLIST = ^THUMBBUTTON; ITaskbarList = interface ['{56FDF342-FD6D-11D0-958A-006097C9A090}'] procedure HrInit; safecall; procedure AddTab(hwnd: Cardinal); safecall; procedure DeleteTab(hwnd: Cardinal); safecall; procedure ActivateTab(hwnd: Cardinal); safecall; procedure SetActiveAlt(hwnd: Cardinal); safecall; end; ITaskbarList2 = interface(ITaskbarList) ['{602D4995-B13A-429B-A66E-1935E44F4317}'] procedure MarkFullscreenWindow(hwnd: Cardinal; fFullscreen: Bool); safecall; end; ITaskbarList3 = interface(ITaskbarList2) ['{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}'] procedure SetProgressValue(hwnd: Cardinal; ullCompleted, ullTotal: ULONGLONG); safecall; procedure SetProgressState(hwnd: Cardinal; tbpFlags: DWORD); safecall; procedure RegisterTab(hwndTab: Cardinal; hwndMDI: Cardinal); safecall; procedure UnregisterTab(hwndTab: Cardinal); safecall; procedure SetTabOrder(hwndTab: Cardinal; hwndInsertBefore: Cardinal); safecall; procedure SetTabActive(hwndTab: Cardinal; hwndMDI: Cardinal; tbatFlags: DWORD); safecall; procedure ThumbBarAddButtons(hwnd: Cardinal; cButtons: UINT; Button: THUMBBUTTONLIST); safecall; procedure ThumbBarUpdateButtons(hwnd: Cardinal; cButtons: UINT; pButton: THUMBBUTTONLIST); safecall; procedure ThumbBarSetImageList(hwnd: Cardinal; himl: Cardinal); safecall; procedure SetOverlayIcon(hwnd: Cardinal; hIcon: HICON; pszDescription: LPCWSTR); safecall; procedure SetThumbnailTooltip(hwnd: Cardinal; pszTip: LPCWSTR); safecall; procedure SetThumbnailClip(hwnd: Cardinal; prcClip: PRect); safecall; end; var hwndProgress : DWord; hWndFont : HFONT; FTaskbarList : ITaskbarList; FTaskbarList2 : ITaskbarList2; FTaskbarList3 : ITaskbarList3; FensterH : HWND; function InitCommonControl(CC: Integer): Boolean; var ICC: TInitCommonControlsEx; begin ICC.dwSize := SizeOf(TInitCommonControlsEx); ICC.dwICC := CC; Result := InitCommonControlsEx(ICC); if not Result then InitCommonControls; end; function CompareMD5(A, B : TMD5Digest) : Boolean; var I : Integer; begin Result := True; for I := 0 to 16 - 1 do if A[I] <> A[I] then begin Result := False; Exit; end; end; const CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11D0-958A-006097C9A090}'; CLSID_TaskbarList2: TGUID = '{602D4995-B13A-429B-A66E-1935E44F4317}'; CLSID_TaskbarList3: TGUID = '{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}'; //Warum das eigentlich? ICC_PROGRESS_CLASS = $00000020; //Brauch nur normal und keine xD TBPF_NOPROGRESS = $00; TBPF_NORMAL = $02; ClassName = 'TTest'; Window1Name = 'Test'; WindowWidth = 270; WindowHeight = 15; function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall; var x, y,FormHeight,FormWidth : integer; begin Result := 0; case uMsg of WM_CREATE: begin x := GetSystemMetrics(SM_CXSCREEN); y := GetSystemMetrics(SM_CYSCREEN); FormHeight := 10 + WindowHeight + (GetSystemMetrics(SM_CYCAPTION)) + (2 * GetSystemMetrics(SM_CYDLGFRAME)) + 10; FormWidth := 10 + WindowWidth + (2 * GetSystemMetrics(SM_CXDLGFRAME)) + 10; MoveWindow(hWnd, (x div 2) - (FormWidth div 2), (y div 2) - ((FormHeight) div 2), FormWidth, FormHeight, true); hwndProgress := CreateWindowEx(0,PROGRESS_CLASS,nil, WS_CHILD or WS_VISIBLE or PBS_SMOOTH,10,10,270,15,hwnd, 0,hInstance,nil); //Brauch ich, da ich es im Fenster und in der Taskleiste haben will; end; WM_DESTROY: begin if CheckWin32Version(6, 1) and (FTaskbarList3 <> nil) then FTaskbarList3.SetProgressState(FensterH, TBPF_NOPROGRESS); //Sollte doch das Freigeben sein oder? Funkt aber net hier auch nicht bei WM_CLOSE PostQuitMessage(0); end; else Result := DefWindowProc(hWnd, uMsg, wParam, lParam); end; end; var wc: TWndClassEx = ( cbSize : SizeOf(TWndClassEx); Style : CS_HREDRAW or CS_VREDRAW; lpfnWndProc : @WndProc; //Fensterfunktion für Fenster 1 cbClsExtra : 0; cbWndExtra : 0; lpszMenuName : nil; lpszClassName : ClassName; //Klassenname für Fenster 1 hIconSm : 0; ); msg: TMsg; var Obj : IInterface; begin wc.hInstance := hInstance; wc.hCursor := LoadCursor(0, IDC_ARROW); wc.hbrBackground := GetSysColorBrush(COLOR_BTNHIGHLIGHT); RegisterClassEx(wc); FensterH := CreateWindowEx(0, ClassName, Window1Name, WS_VISIBLE or WS_SYSMENU, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), WindowWidth, WindowHeight, 0, 0, hInstance, nil); InitCommonControl(ICC_PROGRESS_CLASS); //Ist ja sowieso alles größer alls 32Bit xD Brauch ich das überhaupt? if CheckWin32Version(6, 1) then begin Obj := CreateComObject(CLSID_TaskbarList); if Obj = nil then FTaskbarList := nil else begin FTaskbarList := ITaskbarList(Obj); FTaskbarList.HrInit; FTaskbarList.QueryInterface(CLSID_TaskbarList2, FTaskbarList2); FTaskbarList.QueryInterface(CLSID_TaskbarList3, FTaskbarList3); end; end; if CheckWin32Version(6, 1) and (FTaskbarList3 <> nil) then begin FTaskbarList3.SetProgressState(FensterH, TBPF_NORMAL); FTaskbarList3.SetProgressValue(FensterH, 50, 100); //Testweise end; while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end; ExitCode := msg.wParam; end. |
AW: Windows 7 Support für Delphi [ALPHA 1]
Delphi-Quellcode:
FTaskbarList3.SetProgressState(FensterH, TBPF_NOPROGRESS);
Du teilst hier TaskbarList3 lediglich mit das keine Progressbar angezeigt werden soll Hat mit der freigabe nix zu tun. Denke mal du solltest das Objekt TaskbarList3 Releasen oder? Und für die Progressbar kannst du dir die CLSID_TaskbarList2 schenken. PS: Dann würde ich auch nicht jedesmal auf CheckWin32Version(6, 1) prüfen sondern hier eine fixed variable deklarieren als BOOL oder was auch immer Das reicht wenn man es einmal prüft bei Programmstart. gruss |
Patch für Sprunglisten-Separators (Trennleisten)
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiß, Totengräberei. Löscht meinen Post und steinigt mich, falls es falsch war, hier noch was zu posten. Ich habe mich aber jetzt anderthalb Stunden damit abgemüht, da irgendwie Ordnung in meine Sprunglisten zu bekommen, welche ich als Nutzer von Delphi 2009/XE2 offenbar nur mit diesen Komponenten erstellen kann. Leider gibt es beim Anlegen von Kategorien diese Zugriffsverletzungen (da die versteckt werden, sieht man sie nur beim Debuggen), obwohl ich Admin bin. Da diese Sprunglisten-Komponente auch nicht die Möglichkeit bietet, Trennleisten (Trennbalken, Separators) anzulegen, hat man nach wenigen Items totales Chaos im Startmenü. Daher habe ich mal geguckt, wie man Trennleisten einfügt. Damit Delphi-typisch Bindestriche in Trennleisten umgewandelt werden, ändert ihr in dwJumpLists.pas folgende Zeilen:
Alt
Delphi-Quellcode:
Neu
K.fmtid := StringToGUID('{F29F85E0-4FF9-1068-AB91-08002B27B3D9}');
K.pid := 2; P.vt := VT_LPWSTR; P.pwszVal := PWideChar(ObjectItem.ShellLink.FDisplayName);
Delphi-Quellcode:
Ihr erstellt Trennleisten dann einfach mit durch Aufrufen von
if ObjectItem.ShellLink.FDisplayName = '-' then
begin K.fmtid := StringToGUID('{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}'); K.pid := 6; P.vt := VT_BOOL; P.boolVal := True; end else begin K.fmtid := StringToGUID('{F29F85E0-4FF9-1068-AB91-08002B27B3D9}'); K.pid := 2; P.vt := VT_LPWSTR; P.pwszVal := PWideChar(ObjectItem.ShellLink.FDisplayName); end;
Delphi-Quellcode:
bei eurer TdwJumpLists.
Tasks.AddShellLink('-', '');
Ich hoffe, das hilft jemandem. Von mir noch ein großes Lob an die Ersteller und danke an mleyen fürs Wiederhochladen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 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