Einzelnen Beitrag anzeigen

bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#22

AW: Tastatur Eingabe im Canvas Objekt

  Alt 31. Okt 2014, 09:41
Ich denke, du solltest dich erst mal ein bischen mit der Windows-Programmierung und der objektoriententierten Programmierung unter Delphi vertraut machen. Das war wahrscheinlich mal ein DOS-Programm. Das kann man aber nicht einfach 1:1 nach Windows umsetzen.

Unter Windows wird der Programmablauf von Messages gesteuert, auf die man in Delphi in den entsprechenden Ereignissen reagieren kann.

Was mir noch nicht klar ist:

Deine procedure nctbas01; ist eine einfache Procedure, keine Klassenmethode. Von wo wird die überhaupt aufgerufen? Das war in dem Dos-Programm wahrscheinlich die zentrale Ablaufsteuerung. Unter Windows brauchst du das nicht mehr, da Windows die Ablaufsteuerung in Form der Message-Loop schon mitbrint. Bu brauchst nur auf die verschiedenen Ereignisse zu reagieren.

Wo kommt das Status.CNC.ZBETR her?

StatusBild; ist ebenfalls ein einfache Procedure. Das muss eine Klassenmethode sein, die dann im OnPaint aufgerufen werden muss.

Hier mal ein Grundgerüst, wie es laufen könnte:
Mach ein neues Projekt auf und lege ein TEdit und ein TPaintbox auf die Form:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    PaintBox1: TPaintBox;
    procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure PaintBox1Paint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure StatusBild;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.SetFocus;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
  vk_F1 : begin
            // mach wa mit F1
          end;
  vk_F2 : begin
            // mach wa mit F2
          end;
  // hier noch auf weitere Tasten reagieren
  end;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  StatusBild;
end;

procedure TForm1.StatusBild;
{zeichnet das Bildgeruest fuer den 'Man'-Mode und beschriftet es}
begin
  PaintBox1.Canvas.Brush.Color:= clRed;
  PaintBox1.Canvas.RECTANGLE(2,2, BildB, BildH);
  with PaintBox1.Canvas do begin
    Pen.Color:=clBlack;
    Brush.Color:= clYellow;

    // Application.ProcessMessages; // Nein: hier bitte bloß nicht aufrufen !!!!

    // das hier sich wahrscheinlich Routinen, die irgendwo in einer Art Bibliothekt definiert sind
    // Da müssten man noch den Canvas all zusätzlichen Parameter übergeben
    Column(K_X3,255,0);
    Row(K_Y1,0,511);
    Row(K_Y6,0,K_X3);
    Row(K_Y7,0,K_X3);
  end;
end;
  Mit Zitat antworten Zitat