Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Gleisbild??? mit was??? Paintbox für delphi?? (https://www.delphipraxis.net/98313-gleisbild-mit-paintbox-fuer-delphi.html)

snow 24. Aug 2007 23:17


Gleisbild??? mit was??? Paintbox für delphi??
 
Hallo ich schreibe an einer steuersoftware für Modelleisenbahnen. Ich würde gerne ein gleisbild integrieren. ich habe tutorials für Visual-basic gefunden, aber nicht für delphi.

Ich brauche ein element worin ich bitmaps aneinanderreihen und stapeln kann. Außerdem brauch ich kein Click-event, und ich müsste einzellne pixel auswählen und überschreiben können (nicht die datei sondern nur temporär).

anstatt einzellne pixel zu überschreiben könnte ich auch alle pixel mit dem farbwert X, y, zu ersetzen.

Es wäre auch von vorteil wenn man labels einfügen könnte.

Wie ihr seht verlange ich ziemlich viel, aber es gibt bestimmt eine solche komponente für lazarus,s chließlich haben schon viele andere eine solche software geschrieben.

Welche komponente wäre dazu geiegnet??


MfG snow

3_of_8 24. Aug 2007 23:21

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Ein einfaches TGraphicControl. Allerdings ist es eine schlechte Idee, einzelne Pixel anzusprechen, da das sehr ineffizient ist. Besser wäre es, gleich ganze Bildbereiche zu blitten.

snow 24. Aug 2007 23:28

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
ganze bildberreiche geht das etwa so??

pixel x1,y1 bis x2,y2??? also um ein einfaches rechteck zu deklarieren. doer kan man einen filter drüberlegen, so das ich beim entwerfes des berreiches der die farbe wechseln soll einfach eine unnatürliche farbe nutze, und der filter diese unatürliche farbe gegen eine anderer austauchst???


MfG snow
Ps: gibts das auch für lazarus???

Namenloser 24. Aug 2007 23:57

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Hallo,

als Stichwort kann ich dir nur TCanvas nennen (das gibts sicher auch unter Lazarus, oder?). Mit dieser Klasse kann man Rechtecke, Ellipsen Linien, Text uvm. malen und auch einzelne Pixel ansprechen (wenn's denn sein muss). die meisten Funktionen sind selbsterklärend, Hilfe gibt die Delphihilfe, und wenn mal was überhaupt nicht klappt, soltle es wohl genügend Tutorials geben. (z.B. auf dsdt.info wenn ich kich nicht irre). Wenn du dich dann ein bisschen mit Canvas auseinandergesetzt hast, kannst du dir eine eigene Klasse von TGraphicconrol ableiten (obs das allerdings unter Lazarus gibt weiß ich nicht. Ich bin nicht grad Experte auf dem Gebiet). Dieses TGraphiccontrol bietet ebenfalls eine Eigenschaft vom Typ Canvas an, mit der du dann auf die Komponente zeichnen kannst.

Luckie 25. Aug 2007 07:14

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Es drürfte wohl kein Problem sein das VB Tutorial in Delphi umzusetzen.

Ich kenne das Tutorial nicht, aber ich würde mir für jedes Element (Gerade, Kurve, Weiche eine grafische, sichtbare Komponente schreiben, die man auf der Form plazieren kann. Im OI kann man dann die Ausrichting und alle anderen Eigenschaften einstellen. Dann kannst du dir deinen Gleisplan ganz einfach zusammenklicken.

christian_u 25. Aug 2007 08:37

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Die LCL ist ungefähr auf dem Stand der Delphi 7 VCL TGraphicControl gibts natürlich auch. Es gibt auch viele Propertys die danach eingeführt wurden wie Anchors und co ich weiss allerdings nicht was im BDS an Komponenten dazugekommen ist.

snow 25. Aug 2007 12:20

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
So hier al ein bild wie später ungefär aussehen sollte:

http://www.dusch-modellbahn.de/Baupl...200__Foto_.gif

Wie ihr seht brauche ich einzellne kästchen ähnlich einer tabelle in der ich bild plazieren kann und die beim klicken ein event auslösen können.

So mal schaun was draus wird..

MfG snow

Luckie 25. Aug 2007 12:23

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Hast du dir mal meine Idee durch den Kopf gehen lassen?

snow 25. Aug 2007 12:27

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Ne ich galub nicht das ich eine eigene komponente schreiben kann....... !

Ich hab überlegt einfach ganz viele Speedbuttons oder Timages aneinander zu kleben und aber das wird dann sehr CPU-lastig oder?

MfG snow

Die Muhkuh 25. Aug 2007 12:28

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
DrawGrid wäre hier ein Stichwort.

snow 25. Aug 2007 12:36

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Draw Grind sieht gut aus, vor alles das beispiel mit dem schachfeld kommt meinem gleisbild doch sehr nahe.....

MfG snow

s-off 25. Aug 2007 12:41

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Zitat:

Zitat von snow
Ne ich galub nicht das ich eine eigene komponente schreiben kann....... !

Glauben <> wissen.

Vielleicht wäre dann genau jetzt der Zeitpunkt, sich mit diesem Thema auseinander zu setzen :?: :!:

Du möchtest ja schon etwas recht spezielles, was sich vom Sinn her nicht unbedingt auf alle 'Lebenslagen' übertragen lässt.
Die Idee eines Gleisplanes ist schon nicht schlecht. Und genau aus diesem Grund würde ich mich bemühen, das ordentlich zu machen, und nicht im Endeffekt vor irgendeinem zusammengefrickelten Ergebnis zu stehen. Ich kann da nur für mich sprechen. Und ich hätte den Anspruch, das bestmögliche Ergebnis zu erzielen. Auch wenn es dadurch ggf. länger dauert, und ich mich in unbekannte Bereiche einarbeiten muss.

Das soll nicht heissen, dass man nicht auch mit bereits existierenden Komponenten ein akzeptables Ergebnis erzielen kann. Doch wird man damit irgendwann sicherlich an seine Grenzen stoßen.

Edit: Rechtschreibfehler ausgebaut.

snow 25. Aug 2007 12:51

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Naja so speziell ist es auch nicht. Wie gesagt ein gleisplan ist nix anderes als ein 2D-Schachfeld. Ich denke wenn Drawgrid für ein schachbrett reicht dann auch für ein gleisbild.


MfG snow

ich werde nicht drumrum kommen irgendwann etwas selber zu machen spätestens wenn mein program eine automatik bekommen soll aber bis dahin will ich erst mal manuell etwas erfahrung sammeln.

MfG snow

3_of_8 25. Aug 2007 13:23

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Eine eigene Komponente zu schreiben ist kaum schwerer als eine vorhandene zu verwenden.

Du deklarierst einfach eine Klasse und leitest sie (in deinem Fall nützlich) von TCustomControl ab. Dann überschreibst du die Paint-Methode, deklarierst einen Handler für das OnClick-Ereignis und schon bist du so ziemlich fertig. Dann musst du noch den gleichen Code schreiben wie für dein DrawGrid.

snow 25. Aug 2007 20:35

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
So habs jetzt mit drawgrid versucht. hier mal mein quellcode


Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Grids,
  Buttons, ComCtrls, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    DrawGrid1: TDrawGrid;
    bitmap1: tbitmap;

    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);



begin
bitmap1.LoadFromfile('F:\JTSSfMB\icons\scheinwerfein.bmp');

DrawGrid1.Canvas.draw(1,1 ,bitmap1);

end;

initialization
  {$I Unit1.lrs}

end.

Wenn ich jetztausführe kommt wenn ich auf buton1 klicke das hier

Zitat:

Project raised exception class 'External: SIGSEGV'
dann bleibt mein program hängen und der IDE debuggt , er hört erst mit dem debuggen auf wenn ich lazarus neustarte.

Was hab ich falsch gemacht. (die datei exestiert und ist ein 256farben bitmap)

die zellen sind groß genug

MfG snow

s-off 25. Aug 2007 20:58

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Habe kein Lazarus, aber unter Delphi 'funktioniert' folgendes:

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
   Windows,
   Messages,
   SysUtils,
   Variants,
   Classes,
   Graphics,
   Controls,
   Forms,
   Dialogs,
   StdCtrls,
   Grids;

Type
   TForm1 = Class(TForm)
      DrawGrid1: TDrawGrid;
      Button1: TButton;
      Procedure Button1Click(Sender: TObject);
   private
      Image1: TBitmap;
   End;

Var
   Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);
Begin
   Image1 := TBitmap.Create;
   Image1.LoadFromFile('C:\Download\snap00854.bmp');
   DrawGrid1.Canvas.Draw(1, 1, Image1);
End;

End.

snow 25. Aug 2007 21:07

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Danke funzt bei mir auch hab das .create vergessen.

MfG snow

Edit:// weis jemand warum ich mit
Delphi-Quellcode:
DrawGrid1.Canvas.draw(2,1 ,bitmap1);
das bitmap nicht im feld (2|1) bekomme sondern auf pixel (2|1)??? kann ich das automatisch in eine anderes zelle schicken oder murr ich das ganzen dann errechnen???

DGL-luke 25. Aug 2007 21:34

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
jo, das musst du errechnen.

Du solltest aber im Draw-Event (OnCustomDraw oder so ähnlich) die abmaßungen der jeweiligen zelle direkt mitgeteilt bekommen.

s-off 25. Aug 2007 22:02

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Var
   p: TRect;
Begin
   Image1 := TBitmap.Create;
   Image1.LoadFromFile('C:\Download\snap00854.bmp');
   DrawToCell(DrawGrid1, Image1, 3, 1);
End;

Procedure TForm1.DrawToCell(_Grid: TDrawGrid; _Bitmap: TBitmap; _Col, _Row: Integer);
Var
   p: TRect;
Begin
   p := _Grid.CellRect(_Col, _Row);
   _Grid.Canvas.Draw(p.Left, p.Top, _Bitmap);
End;
Edit: Methode zum Zeichnen eingefügt

snow 26. Aug 2007 10:26

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
So ich hab jetzt eine form,in der ich die abmaße des gleisbildes eingeben kann. dann wird eine anderer Form aufgerufen, in der sich das drawgrid gefindet. Jetzt brauch ich die möglichkeit das ich die position eines mit der maus markierten feld herausfindet.

wie geht das??

MfG snow

s-off 26. Aug 2007 10:30

Re: Gleisbild??? mit was??? Paintbox für delphi??
 
Nimm als Denkansatz den Code meines letzten Beitrags in diesem Thread.

Selection...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 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