AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kleines Rekursiv-Problem

Ein Thema von Neutral General · begonnen am 8. Mai 2007 · letzter Beitrag vom 8. Mai 2007
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Kleines Rekursiv-Problem

  Alt 8. Mai 2007, 18:28
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:

GlobalX := Button.Left + GetDX(0,PanelAufDemDerButtonIst); oder

GlobalX := GetDX(Button.Left,PanelAufDemDerButtonIst); 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 -.-

Delphi-Quellcode:
function GetDX(Ax: Integer; WC: TWinControl): Integer;
begin
 if WC <> nil then
   GetDX(Ax+WC.Left,WC.Parent)
 else
  Result := AX;
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Kleines Rekursiv-Problem

  Alt 8. Mai 2007, 18:32
verwende doch einfach ClientToScreen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von GimbaR
GimbaR

Registriert seit: 17. Apr 2004
Ort: Weltmetropole Rostock ;)
134 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Kleines Rekursiv-Problem

  Alt 8. Mai 2007, 18:35
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 [/edit]
Jonas
Bei dem Tempo ist es nur noch eine Frage der Zeit bis SSchäuble verlangt allen deutschen Bürgern ein Halsband zur ständigen Überwachung zu verpassen...
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#4

Re: Kleines Rekursiv-Problem

  Alt 8. Mai 2007, 18:36
Hallo!

Was soll denn dieses AX da? Entweder ClientToScreen, oder das hier:

Delphi-Quellcode:
function GetAbsoluteLeft(Control:TWinControl):Integer;
begin
  if Control.Parent<>NIL then
    Result:=Control.Left+GetAbsoluteLeft(Control.Parent)
  else
    Result:=Control.Left;
end;
Cu,
Udontknow
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Kleines Rekursiv-Problem

  Alt 8. Mai 2007, 18:38
Leute das problem ist: Funktioniert bei AndorraSprites nicht
Mom mal grad... ich glaub ich muss da was zurücknehmen.. *Test*
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#6

Re: Kleines Rekursiv-Problem

  Alt 8. Mai 2007, 18:42
Zitat von GimbaR:
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 [/edit]
Denke ich aber nicht; Du hast schon recht. Der oberste (erste) Aufruf wird Result nicht setzen, da WC<>NIL. Die Rekursion wird aufgerufen, aber das Ergebnis nicht in Result gespeichert.

Cu,
Udontknow
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Kleines Rekursiv-Problem

  Alt 8. Mai 2007, 18:44
Hi,

Ja wie schon eben editiert: Ich kanns natürlich mit ClientToScreen machen:

D := TSpriteEngine(Parent).Surface.Parent.ClientToScreen(Point(0,0)); dann hab ich mein d.x und d.y

Danke für eure Hilfe

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz