![]() |
Kleines Rekursiv-Problem
Hi,
Folgende function soll rekursiv einen x-Wert ausrechnen.. z.B wenn man nen Button auf nem Panel auf nem Panel auf nem Panel auf ner Form hat und dann die Bildschirmposition haben will dann würde man mit meiner Methode so vorgehn:
Delphi-Quellcode:
oder
GlobalX := Button.Left + GetDX(0,PanelAufDemDerButtonIst);
Delphi-Quellcode:
Das klappt irgendwie.. aber irgendwie auch nicht... wenn ich das ganze mit Breakpoints verfolge dann arbeitet alles wunderbar aber dann ist WC = nil und Result wird gesetzt.. danach die nächste Station ist ja end; und danach wird eigentlich wieder in die Procedure gesprungen die GetDX aufgerufen hat. Komischerweise bleibt der Debugger aber 3 mal hintereinander bei end; stehn und auf einmal ist Result = 45243412 oder so -.-
GlobalX := GetDX(Button.Left,PanelAufDemDerButtonIst);
Delphi-Quellcode:
Gruß
function GetDX(Ax: Integer; WC: TWinControl): Integer;
begin if WC <> nil then GetDX(Ax+WC.Left,WC.Parent) else Result := AX; end; Neutral General |
Re: Kleines Rekursiv-Problem
verwende doch einfach ClientToScreen :-D
|
Re: Kleines Rekursiv-Problem
An der Stelle, wo der Rekursionsabbruch erfüllt wird (WC = nil) ist Result ja nicht definiert. Deswegen bekommst du wohl so ne komische Zahl heraus.
[edit] Ich glaub, das war quatsch :pale: [/edit] |
Re: Kleines Rekursiv-Problem
Hallo!
Was soll denn dieses AX da? Entweder ClientToScreen, oder das hier:
Delphi-Quellcode:
Cu,
function GetAbsoluteLeft(Control:TWinControl):Integer;
begin if Control.Parent<>NIL then Result:=Control.Left+GetAbsoluteLeft(Control.Parent) else Result:=Control.Left; end; Udontknow |
Re: Kleines Rekursiv-Problem
Leute das problem ist: Funktioniert bei AndorraSprites nicht ;)
Mom mal grad... ich glaub ich muss da was zurücknehmen.. *Test* |
Re: Kleines Rekursiv-Problem
Zitat:
Cu, Udontknow |
Re: Kleines Rekursiv-Problem
Hi,
Ja wie schon eben editiert: Ich kanns natürlich mit ClientToScreen machen:
Delphi-Quellcode:
dann hab ich mein d.x und d.y :)
D := TSpriteEngine(Parent).Surface.Parent.ClientToScreen(Point(0,0));
Danke für eure Hilfe ;) Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 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