Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Syntax-Datenbank (https://www.delphipraxis.net/165366-syntax-datenbank.html)

himitsu 27. Dez 2011 13:11

AW: Syntax-Datenbank
 
Zitat:

Lesen von Adresse 000001A8.
$00000000 + Property/Feld-Offest = nil

NIL = ein Zeiger, in dem nichts drin ist

Vermutung: Du hast vergessen die Komponente zu erstellen (wie mein Vorredner auch schon vermutete)


PS: Der Dedugger sagt dir auch noch an welcher Codezeile das passiert und dort könnte man sich dann noch die Variablenwerte ansehn und schon weißt du, was da fehlt.

Mpex 27. Dez 2011 13:18

AW: Syntax-Datenbank
 
Gut, das war etwas unglücklich, hab den Namen einfach mal in BildA geändert. Und ja, zum probieren hab ich das selbst in den Quellcode geschrieben, aber da gibt es sonst noch nichts sehenswertes, ich wollte ja erstmal nur testen ob das Laden des Bildes so funktioniert. Das Testprogramm sieht so aus:

Delphi-Quellcode:
program test;
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

var
BildA: Timage;
Directory:String;


procedure wait(t: longint);   {W A R T E}
  var
    a: longint;
  begin
    a := GetTickCount;
    repeat
      Application.ProcessMessages;
    until (GetTickCount > a+t);
  end;


function Pfad: string;  {D I R E C T O R Y}
begin
  Result := ExtractFilePath(ParamStr(0));
  Directory:=Result;
end;

begin
  Pfad;
  BildA.Picture.LoadFromFile(Directory+'\Bild1.bmp');
  wait(5000);
end.
Das ist schon alles.

@Himitsu:
Debug-Ausgabe: FTH: (5836): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. *** Prozess Test.exe (5836)
ist alles besondere, was ich sehe.. Meinst du die (5836)? Wie muss ich das denn lesen, um die Zeile zu finden?

fkerber 27. Dez 2011 13:24

AW: Syntax-Datenbank
 
Hi,

jepp, das ist das Problem - da fehlt was.

Du hast jetzt quasi gesagt, es wird da mal ein Bild geben, das wird den Namen BildA tragen, aber angelegt hast du es nicht.
Was da also fehlt ist etwas in der Art (frei aus dem Kopf, keine Garantie)
Delphi-Quellcode:
BildA := TImage.Create();
und später, wenn du es nicht mehr brauchst, musst du es auch wieder aufräumen
Delphi-Quellcode:
BildA.Free();
- aber damit wäre es dann nicht getan - du musst dem Bild mindestens mal noch nen Parent zuweisen sowie auch Größe und Position wären sinnvoll.

Vermutlich ist es einfacher, du ziehst die Komponente auf dem Formular dorthin, wo du sie haben möchtest und nennst sie BildA.


LG, Frederic

himitsu 27. Dez 2011 13:44

AW: Syntax-Datenbank
 
Du hast Application nicht initialisiert. (schau mal in eine nomale DPR, welche Delphi anlegt)

Wenn du das Bild nicht anzeigen willst, dann verwende doch TPicture oder direkt TBitmap, da du ja ein Bitmap lädst.


PS: Das mit dem globalen Directory-Parameter ist doch nicht wirklich dein Ernst?
Bzw. vorallem das mit der Pfad-Funktion. :shock:

PSSPPS: Du hast hier keine VCL-Anwendung, also kannst du auch dirtekt Delphi-Referenz durchsuchenSleep verwenden, anstatt diesem Wait.


Die 5836 ist nur die interne Fehlernummer.
Zitat:

Wie muss ich das denn lesen, um die Zeile zu finden?
In diesem Fall? (da hier sämtliche Exceptionbehandlung fehlt, welche die VCL sonst noch automatisch mitbringt)

3 Mal F7 F8 drücken und beim 4. Mal knallt es.
Also spätestens nach dem 3. Mal wirst du sehn, daß die Variable "BildA" immernoch NIL ist und demanch muß es knallen, wenn auf die Picture-Eigenschaft des nichtexistierenden Bildes zugegriffen wird.

Mpex 27. Dez 2011 13:58

AW: Syntax-Datenbank
 
Hmm, tut mir wirklich leid, aber irgendwie verstehe ich das nicht ganz - wenn ich das Bild "reinziehe", kann ich einen Pfad angeben und es funktioniert, scheibar "einfach so".
Aber wenn ich das dann in den tatsächlichen Code reingehe, um mir anzusehen, wie es richtig aussieht, steht da... nichts?! Das kann doch irgendwie nicht sein.

Also um das verständlicher zu machen: Ich habe ein neues Projekt geöffnet, ein Timage reingezogen, den Pfad ausgesucht und es ging. Bei doppelklick darauf lese ich aber nur folgenden Code:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
    Image1: TImage;
    procedure Image1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Image1Click(Sender: TObject);
begin

end;

end.
Es muss doch irgendwo der Pfad und das .create vermerkt sein oder bin ich jetzt völlig daneben?

@himitsu: Später soll das natürlich schon angezeigt werden, das war ja nur ein test(und dann werden es auch .jpg Dateien sein). Ich komme mir irgendwie ziemlich blöd vor bei den ganzen Fehlern. Gibt es nicht ein Tutorial, das den Umgang hiermit von Grund auf erklärt, damit ich euch das hier ersparen kann?
zu PS: Wo ist denn das Problem damit?
zu PPPS: Ah! Wieder was gelernt ;-)

implementation 27. Dez 2011 14:04

AW: Syntax-Datenbank
 
Wenn du den Formulareditor benutzt, wird das Bild als Resource ins Projekt übernommen und mit in die Exe einkompilierteingelinkt. Deshalb siehst du da nirgendwo einen Pfad ;)

himitsu 27. Dez 2011 14:07

AW: Syntax-Datenbank
 
Zu deiner PAS gibt es hier noch eine DFM.

In dieser DFM-Resource steht drin, was alles auf der Form liegt und welche eigenschaften dieses hat.

Die VCL läd nun, beim Erstellen der TForm1-Instanz, diese DFM und erstellt die enthaltenen Komponenten.
Das
Delphi-Quellcode:
Image1 := TImage.Create
wird also vom VCL-Loader automatisch gemacht.

Du wolltest das TImage aber ohne den VCL-Loader nutzen und dann mußt du das TImage auch sleber erstellen und ebenfalls die nötigen Eigenschaften setzen.

PS: Wenn du über den OI ein Bild in das TImage lädst, dann wird das Bild zu diesem Zeitpunkt in die Kompoente geladen und dann direkt in der DFM gespeichert.
Beim Laden der Form kommt dann das Bild aus der DFM und die externe Datei wird nicht mehr benötigt.



PSS: Rechtsklick auf die Form und "Ansicht als Text". (oder direkt in die .DFM reinsehn, wenn diese im Textformat gespeichert wurde, dann sieht man auch etwas)

Mpex 27. Dez 2011 14:11

AW: Syntax-Datenbank
 
Kopf -> Tisch ...

Okay, aber das Bild möchte ich in ein Programm einfügen, dass ohne Formulare etc. erstellt wurde, also muss ich entweder das gesamte Programm umstellen (Was ein riesenhaufen Arbeit wäre, abgesehen davon, dass ich mich garnicht sogut damit auskenne, als das ich mir das zutrauen würde) oder das Bild anpassen. Aber wie krieg ich jetzt den korrekten Umgang mit Timage raus (Am besten ohne mir alles von euch vorsagen zu lassen :P)?

P.S: Vielen Dank übrigens für eure Geduld mit mir. Ich gebe mir wirklich Mühe, mitzukommen und möglichst selbst drauf zu kommen, bin aber eben noch sehr unerfahren mit Delphi.

*Edit* Entschuldigung, dein PSS(...) hatte ich nicht gesehen ([OT] Warum eigentlich PSS? [/OT]). Damit kommen wir der Sache ja schon etwas näher. Allerdings steht da auch nicht der Pfad, sondern nur die Bildinformation, die aus einem gigantischem Zahlen/Buchstaben-Salat besteht.

himitsu 27. Dez 2011 14:21

AW: Syntax-Datenbank
 
Zitat:

Zitat von Mpex (Beitrag 1143317)
Aber wie krieg ich jetzt den korrekten Umgang mit Timage raus (Am besten ohne mir alles von euch vorsagen zu lassen :P)?

Tipp: In meinem letzen Post versteckte sich ein Stückchen Quellcode.
(in der OH steht auch was für Parameter dort nötig sind > Delphi-Referenz durchsuchenTImage.Create ... Tipp: NIL)

Zitat:

Zitat von Mpex (Beitrag 1143317)
Allerdings steht da auch nicht der Pfad, sondern nur die Bildinformation, die aus einem gigantischem Zahlen/Buchstaben-Salat besteht.

Wie gesagt, den Pfad gibt es dort nicht, da dort direkt das Bild drin ist ... schön kodiert, damit es als Text reinpaßt. (Binärdaten in einer Textdatei sind nicht sonderlich praktisch :zwinker: )

Mpex 27. Dez 2011 16:04

AW: Syntax-Datenbank
 
Soweit bin ich mit der Suche schon selbst gekommen, nur gebracht hatt es mir leider nichts ;) Das Problem ist, dass ich die Parametereingabe nicht verstehe - und wenn ich mir den Text zu Owner und die weiterführenden durchlese, wird es nur noch schlimmer. Es soll kein Objekt für die Freigabe usw. zuständig sein, das Bild soll einfach nur zu einer voher im Programm festgelegten Zeit aufgerufen, angezeigt und je nach Programmverlauf(Der ist aber auch schon festgelegt) verschoben oder verändert werden. Was ich suchte war im Prinzip also
"...ZeigeBild1(Position)...VerschiebeBild1(NeuePos ition)...ZeigeBild2..." usw.

Und zum zweiten: Meinst du damit, ich soll alle Bilder (Das wären so um die 100)in dieser Form in mein Programm Kopieren? Dann hab ich ja Seitenweise Buchstabensalat im Quellcode.. geht das nicht anders?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Seite 2 von 4     12 34      

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