|
Registriert seit: 23. Mai 2007 117 Beiträge Delphi 2006 Professional |
#1
Hallo...
Es tut mit leid, dass ich hier soviel Quellcode posten muss, aber ich weiß einfach nich woran es liegt. Mein Programm stürzt einfach irgendwann ab, wenn ich das Fenster verkleinern will, ab einer bestimmten Größe schmiert er ab und alles hängt sich auf. Es kam irgendwann ma die oben genannte Fehlermeldung. Ich weiß mir nich so richtig zu helfen. Wäre toll, wenn einer mal drüber schauen könnte bzw. generell eine Idee hätte, worans liegen könnte...Dachte eiegntlich ich würd alles soweit beachten. Dankeschön schonmal und liebe Grüße, Laura
Delphi-Quellcode:
procedure CalculateRect(ParentID: TTreemapElementID; ARect: TRect; Layer: Integer;
CalculateHint: Boolean; MouseX: Integer; MouseY: Integer; var Path: WideString; var FrameRect: TRect; var Caption: WideString; var Value: Integer; var ID: TTreemapElementID); var i: Integer; ChildCount: Integer; StartIndex: Integer; EndIndex: Integer; Orientation: Boolean; CurrentAspect: Single; LastAspect: Single; CurrentX: Single; CurrentY: Single; CurrentX1: Single; CurrentY1: Single; OffsetX: Single; OffsetY: Single; TotalSum: Integer; ScaleValue: Double; TempChildCount: Integer; AWidth: Integer; AHeight: Integer; TempWidth: Single; TempHeight: Single; TempArray: Array of TSortArray; j: Integer; begin StartIndex := 0; EndIndex := 0; CurrentAspect := 999; OffsetX := 0.0; OffsetY := 0.0; AWidth := ARect.BottomRight.X - ARect.TopLeft.X; AHeight := ARect.BottomRight.Y - ARect.TopLeft.Y; TempWidth := AWidth; TempHeight := AHeight; // keine Gleitkommazahlberechnungen, daher nich wichtig Orientation := DrawingOrientation(TempWidth, TempHeight); ComputeSizeArray(ParentID); ChildCount := DoGetChildCount(ParentID); TotalSum := SumRectangles(ParentID); try ScaleValue := ((AWidth * AHeight) / TotalSum) / 100 except on EZeroDivide do ScaleValue := 0.0; end; for i := 0 to ChildCount-1 do begin SortArray[i].SizeTemp := ScaleValue * SortArray[i].Values.ChildValue; end; while (EndIndex <> ChildCount) do begin LastAspect := SquarifiedTryLayout(StartIndex, EndIndex, Orientation, TempWidth, TempHeight); if ((LastAspect > CurrentAspect) or (LastAspect < 1)) then begin CurrentX := ARect.TopLeft.X; CurrentY := ARect.TopLeft.Y; for i:= StartIndex to EndIndex-1 do begin SortArray[i].X := OffsetX + CurrentX; SortArray[i].Y := OffsetY + CurrentY; if (Orientation)then CurrentY := Single(CurrentY) + Single(SortArray[i].Height) else CurrentX := Single(CurrentX) + Single(SortArray[i].Width); end;//for if (Orientation) then OffsetX := Single(OffsetX) + Single(SortArray[StartIndex].Width) else OffsetY := Single(OffsetY) + Single(SortArray[StartIndex].Height); TempWidth := AWidth - OffsetX; TempHeight := AHeight - OffsetY; Orientation := DrawingOrientation(TempWidth, TempHeight); StartIndex := EndIndex; EndIndex := StartIndex; CurrentAspect := 999; continue; end//if(LastAspect>CurrentAspect) else begin for i:= StartIndex to EndIndex do begin SortArray[i].Width := SortArray[i].TempWidth; SortArray[i].Height := SortArray[i].TempHeight; end;//for CurrentAspect := LastAspect; end;//else EndIndex := EndIndex + 1; end;//while(EndIndex <> ChildCount) CurrentX1 := ARect.TopLeft.X; CurrentY1 := ARect.TopLeft.Y; for i:= StartIndex to EndIndex-1 do begin SortArray[i].X := Single(OffsetX) + Single(CurrentX1); SortArray[i].Y := Single(OffsetY) + Single(CurrentY1); if (Orientation) then CurrentY1 := CurrentY1 + SortArray[i].Height else CurrentX1 := CurrentX1 + SortArray[i].Width; end;//for if(CalculateHint = False) then SquarifiedPaintRect(Layer, ParentID) else begin for i:=0 to ChildCount-1 do begin ARect.TopLeft := Point(Round(SortArray[i].X), Round(SortArray[i].Y)); ARect.BottomRight := Point(Round(SortArray[i].Width + SortArray[i].X), Round(SortArray[i].Height + SortArray[i].Y)); if (CheckMouseMove(MouseX, MouseY, ARect, Path, ParentID, i)) then begin if ((ComputeArea(ARect) <= MinimumSize) or ((ShowLeafs = False) and (SortArray[i].Values.IsFolder = False))) then begin FrameRect.TopLeft := Point(0,0); FrameRect.BottomRight := Point(0,0); Value := 0; end else begin FrameRect := ARect; Caption := SortArray[i].Values.ChildCaption; Value := SortArray[i].Values.ChildValue; ID := SortArray[i].ChildID; end;//else exit; end;//if(CheckMouseMove) end;//for end;//if(CalculateHint) SetLength(TempArray, Length(SortArray)); for j := 0 to Length(SortArray) - 1 do begin TempArray[j] := SortArray[j]; end; for i := 0 to ChildCount-1 do begin TempChildCount := DoGetChildCount(TempArray[i].ChildID); if (TempChildCount >=1) then begin ARect.TopLeft := Point(Round(TempArray[i].X), Round(TempArray[i].Y)); ARect.BottomRight := Point(Round(TempArray[i].Width + TempArray[i].X), Round(TempArray[i].Height + TempArray[i].Y)); if (Parents) then AddPadding(ARect); DrawOuterRect(ARect, Layer+1, True, 2, SortArray[i].Values.ChildImageIndex, SortArray[i].Values.ChildCaption); SquarifiedCalculateRect(TempArray[i].ChildID, ARect, Layer+1, CalculateHint, MouseX, MouseY, Path, FrameRect, Caption, Value, ID); end;//if(TempChildCount...) end;//for end;
Delphi-Quellcode:
function TCustomTreemapChart.SquarifiedTryLayout(StartIndex: Integer; EndIndex: Integer; Orientation: Boolean; TempWidth: Single;
TempHeight: Single): Single; var Total: Single; Aspect: Single; LocalWidth: Single; LocalHeight: Single; i: Integer; begin Aspect := 0.0; Total := SumRectanglesIndex(StartIndex, EndIndex); if (Orientation) then begin try LocalWidth := Total / TempHeight * 100; except on EZeroDivide do LocalWidth := 0.0; end; LocalHeight := TempHeight; end//if(Orientation) else begin try LocalHeight := Total / TempWidth * 100; except on EZeroDivide do LocalHeight := 0.0; end; LocalWidth := TempWidth; end;//else for i:= StartIndex to EndIndex do begin if (Orientation) then begin SortArray[i].TempWidth := LocalWidth; try SortArray[i].TempHeight := Single(LocalHeight) * (Single(SortArray[i].SizeTemp) / Total); except on EZeroDivide do SortArray[i].TempHeight := 0.0; end; end//if(Orientation) else begin SortArray[i].TempHeight := LocalHeight; try SortArray[i].TempWidth := Single(LocalWidth) * (Single(SortArray[i].SizeTemp) / Total); except on EZeroDivide do SortArray[i].TempWidth := 0.0; end; end;//else Aspect := AspectRatio(SortArray[i].TempWidth, SortArray[i].TempHeight); end;//for Result := Aspect; end;
Delphi-Quellcode:
function TCustomTreemapChart.SumRectanglesIndex(StartIndex: Integer; EndIndex: Integer): Single;
var i: Integer; begin Result := 0.0; for i:= StartIndex to EndIndex do begin try Result := Single(Result) + Single(SortArray[i].SizeTemp); except on EAccessViolation do Result := 0.0; end;//try end;//for end;
Delphi-Quellcode:
class function TCustomTreemapChart.AspectRatio(Width: Single; Height: Single): Single;
begin Result := 0.0; if ((Width > 0.0) and (Height > 0.0)) then Result := Max(Single(Width)/Single(Height), Single(Height)/Single(Width)); end; |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |