![]() |
Array of TImage von anderer unit benutzen
Hi,
ich habe jetzt in meiner Klasse (siehe diesen Post: ![]()
Delphi-Quellcode:
Und so versuche ich Bilder in den Array zu packen:... ... type TElementList = class(TScrollBox) constructor Create(AOwner: TComponent); override; function Add(ElemType: TElementType; Content: String):Integer; procedure Refresh; procedure Move(OldPosition, NewPosition: Integer); end; var Icons: Array of TImage; //hier wird der Array deklariert ... ... constructor TElementList.Create(AOwner: TComponent); begin inherited Create(AOwner); BevelInner := bvNone; BevelKind := bkFlat; BevelOuter := bvLowered; BorderStyle := bsNone; Items := TObjectList.Create; //hier erstelle ich die images, beim ersten bild bleibt der debugger stehen und es hagelt eine AV Icons[0] := TImage.Create(Self); Icons[1] := TImage.Create(Self); Icons[2] := TImage.Create(Self); Icons[3] := TImage.Create(Self); Icons[4] := TImage.Create(Self); Icons[5] := TImage.Create(Self); Icons[6] := TImage.Create(Self); end;
Delphi-Quellcode:
Welches Problem hat der Debugger hier?
Icons[0].Picture := text.Picture;
Icons[1].Picture := image.Picture; Icons[2].Picture := chart.Picture; Icons[3].Picture := table.Picture; Icons[4].Picture := syntax.Picture; Icons[5].Picture := html.Picture; Icons[6].Picture := media.Picture; |
Re: Array of TImage von anderer unit benutzen
Hallo Andreas,
bevor du die einzelnen Icons initialisieren kannst, musst du das Array dimensionieren:
Delphi-Quellcode:
Du hast das Array als globale Variable deklariert. Sollte es nicht besser eine Eigenschaft deiner Klasse sein?
begin
// ... SetLength(Icons, 7); Icons[0] := TImage.Create(Self); end; Grüße vom marabu |
Re: Array of TImage von anderer unit benutzen
Hi,
danke für deine Antwort. Die Anwendung läuft jetzt. Die Bilder tauchen jedoch nicht auf wenn ich meine Add-Routine aufrufe. ich weiß jedoch nicht warum?!?! Die Unit:
Delphi-Quellcode:
Die Zuweisung der Bilderimg ButtonClick einer anderen Unit:
unit ElementList;
interface uses ExtCtrls, pngimage, graphics, SysUtils, Classes, forms, controls, contnrs; type TElementType = (etText, etImage, etChart, etTable, etCode, etHTML, etMedia); type TElementList = class(TScrollBox) constructor Create(AOwner: TComponent); override; function Add(ElemType: TElementType; Content: String):Integer; procedure Refresh; procedure Move(OldPosition, NewPosition: Integer); end; var Icons: Array of TImage; implementation var Items: TObjectList; constructor TElementList.Create(AOwner: TComponent); begin inherited Create(AOwner); BevelInner := bvNone; BevelKind := bkFlat; BevelOuter := bvLowered; BorderStyle := bsNone; Items := TObjectList.Create; SetLength(Icons, 7); Icons[0] := TImage.Create(Self); Icons[1] := TImage.Create(Self); Icons[2] := TImage.Create(Self); Icons[3] := TImage.Create(Self); Icons[4] := TImage.Create(Self); Icons[5] := TImage.Create(Self); Icons[6] := TImage.Create(Self); end; procedure TElementList.Move(OldPosition, NewPosition: Integer); begin Items.Move(OldPosition, NewPosition); Refresh; end; procedure TElementList.Refresh; var i, position: Integer; begin position := 0; for i := 0 to Items.count - 1 do begin (Items.Items[i] as TPanel).Visible := false; end; for i := 0 to Items.count - 1 do begin (Items.Items[i] as TPanel).Top := position + 80; (Items.Items[i] as TPanel).Visible := true; end; end; function TElementList.Add(ElemType: TElementType; Content: String):Integer; var layer: TPanel; imgtype: TImage; begin layer := TPanel.Create(Self); with layer do begin BevelInner := bvNone; BevelKind := bkNone; BevelOuter := bvNone; BorderStyle := bsNone; Align := alTop; Height := 80; Parent := Self; Visible := false; Color := clBlack; Result := Items.Add(layer); end; imgtype := TImage.Create(layer); with imgtype do begin Parent := layer; Visible := true; Left := 8; Top := 8; Height := 28; Width := 28; end; if ElemType = etText then begin imgtype.Picture.graphic := Icons[0].Picture.graphic; end else if ElemType = etImage then begin imgtype.Picture.graphic := Icons[1].Picture.graphic; end else if ElemType = etChart then begin imgtype.Picture.graphic := Icons[2].Picture.graphic; end else if ElemType = etTable then begin imgtype.Picture.graphic := Icons[3].Picture.graphic; end else if ElemType = etCode then begin imgtype.Picture.graphic := Icons[4].Picture.graphic; end else if ElemType = etHTML then begin imgtype.Picture.graphic := Icons[5].Picture.graphic; end else if ElemType = etMedia then begin imgtype.Picture.graphic := Icons[6].Picture.graphic; end; end; end.
Delphi-Quellcode:
Icons[0].Picture.graphic := text.Picture.graphic;
Icons[1].Picture.graphic := image.Picture.graphic; Icons[2].Picture.graphic := chart.Picture.graphic; Icons[3].Picture.graphic := table.Picture.graphic; Icons[4].Picture.graphic := syntax.Picture.graphic; Icons[5].Picture.graphic := html.Picture.graphic; Icons[6].Picture.graphic := media.Picture.graphic; |
Re: Array of TImage von anderer unit benutzen
Weisst du schon, dass die Zuweisung der Bilder besser über die Methode Assign() erfolgen sollte?
Und hast du schon einmal darüber nachgedacht deiner Klasse eine Eigenschaft ImageList an Stelle von einem array of TImage zu spendieren? Was die Visualisierung deiner Bilder angeht, da musst du den Fehler in dem Code suchen, der die Bilder sichtbar machen soll. Wo setzt du denn die Eigenschaft Parent deiner Bildkomponenten? Freundliche Grüße |
Re: Array of TImage von anderer unit benutzen
Zitat:
Zitat:
![]() Zitat:
Delphi-Quellcode:
EDIT: Also der Parent passt so. Hab mal schnell in der selben Routine ein TShape erzeugt und den selben Parent zugewiesen. Wird angezeigt :-)
...
imgtype := TImage.Create(layer); with imgtype do begin Parent := layer; //layer ist das TPanel ... Das mit dem Assign habe ich jetzt abgeändert. Funktioniert jetzt alles ohne AVs. Die Bilder werden trotzdem nicht angezeigt... Warum? |
Re: Array of TImage von anderer unit benutzen
Hat keiner eine Idee wieso das/die Image/s nicht angezeigt werden?
EDIT: Hab das Problem. Ich vergass den Teil wo die Images zugewiesen werden auszuführen bevor die ersten Items erzeugt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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