Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Warum funktioniert ein Code einmal und dann wieder nicht? (https://www.delphipraxis.net/142895-warum-funktioniert-ein-code-einmal-und-dann-wieder-nicht.html)

Ralf Kaiser 5. Nov 2009 18:37

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Zitat:

Zitat von Mr.XYZ
wolte nur noch mal sagen, wen ich dem Form mit
Delphi-Quellcode:
Form.KeyPreview
den Fokus zuweise(also beim Start) dann heißt es immer "einem Unsichtbaren oder inaktiven Fenster kann kein Fokus zugewiesen werden"

Ähhmm, "mit KeyPreview den Focus zuweisen"???? :gruebel: Wie soll das denn gehen?

"KeyPreview" ist eine Eigenschaft deines Formulars vom Typ "boolean". Dieser Eigenschaft musst du den Wert "true" zuweisen. Das geht auch im Objektinspector.

Also, angenommen dein Formular heisst "DasFormular", dann kannst du, z.B. in OnCreate, schreiben:

Delphi-Quellcode:
KeyPreview := true; // entspricht DasFormular.KeyPreview := true;
Alternativ dazu kannst du die Eigenschft natürlich im OI zuweisen.

Wenn KeyPreview den Wert "true" hat wirkt sich da so aus, dass das Formular vor allen anderen Komponenten auf dem Formular die Tasten über die Events "OnKey..." zu sehen bekommt. Ist der Wert false so gehen die Tasten nur an die Komponente die gerade den Focus hat.

siehe auch: Delphi-Referenz durchsuchenKeyPreview

Matze 5. Nov 2009 18:38

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Setze es doch einfach im OI (Objektinspektor), dann hast du deine Ruhe.

Edit: Da war wohl einer schneller.

Mr.XYZ 5. Nov 2009 18:52

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Entschuldigung sollte heißen:
Zitat:

He!!
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet. Konten das Problem aber jetzt lösen! wolte nur noch mal sagen, wen ich dem Form mit
Delphi-Quellcode:
Form.KeyPreview
den Fokus zuweise(also beim Start) dann heißt es immer "einem Unsichtbaren oder inaktiven Fenster kann kein Fokus zugewiesen werden", habe aber jetzt
Delphi-Quellcode:
Form.ActiveControl
verwendet.
und nicht:

Zitat:

He!!
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet. Konten das Problem aber jetzt lösen! wolte nur noch mal sagen, wen ich dem Form mit
Delphi-Quellcode:
Form.KeyPreview
den Fokus zuweise(also beim Start) dann heißt es immer "einem Unsichtbaren oder inaktiven Fenster kann kein Fokus zugewiesen werden", habe aber jetzt
Delphi-Quellcode:
Form.KeyPreview
verwendet

Ralf Kaiser 5. Nov 2009 18:59

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Zitat:

Zitat von Mr.XYZ
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet.

Also, das will ich jet aber mal wissen:

Wie äussert es sich wenn ein Programm sich "überarbeitet"?? :gruebel:

mkinzler 5. Nov 2009 19:07

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Zitat:

Wie äussert es sich wenn ein Programm sich "überarbeitet"?? Grübelnd...
Es geht zum Arzt und lässt sich das Burnout-Syndrom attestieren :stupid:

Mr.XYZ 5. Nov 2009 19:14

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Zitat:

Zitat von Alfi001
Wie äussert es sich wenn ein Programm sich "überarbeitet"?? :gruebel:

Weiß ich doch nicht, ich meinte halt das es so was wie eine Endlosschleife gab.(oder weiß ich was..)

Ralf Kaiser 5. Nov 2009 19:25

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Hattest du "KeyPreview" auf true gesetzt?

Zeig doch nochmal den kompletten Code der ausgeführt wird wenn die Taste gedrückt wird. Ich vermute nämlich, dass dort die Löschung des Tastendruckes mit "Key := 0" bzw. "Key := #0" (je nachdem in welchem Eventhandler) fehlt!

Ralf Kaiser 5. Nov 2009 19:27

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Zitat:

Zitat von mkinzler
Zitat:

Wie äussert es sich wenn ein Programm sich "überarbeitet"?? Grübelnd...
Es geht zum Arzt und lässt sich das Burnout-Syndrom attestieren :stupid:

Oder es äussert sich so:

Delphi-Quellcode:
ShowMessage('Ach lass mich in Ruhe. Ich hatte heute einen schweren Tag');
Application.Terminate;
SCNR...

p80286 6. Nov 2009 09:08

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
Zitat:

He!!
mein Programm analysiert jede taste die gedrückt wird, und bei Strg. hat es sich immer überarbeitet.....
Soll wohl eher heißen "... mein Programm soll jede Taste, die gedrückt wird, analysieren....."

Zeig doch mal den Quellcode!
Da stimmt doch hinten und vorne was nicht.

Zitat:

Weiß ich doch nicht, ich meinte halt das es so was wie eine Endlosschleife gab.(oder weiß ich was..)
Wir wissen nicht was Ihr Arzt empfielt, wir empfehlen die Benutzung des Debuggers.

Gruß
K-H

Mr.XYZ 6. Nov 2009 11:17

Re: Warum funktioniert ein Code einmal und dann wieder nicht
 
okay hier ist der Quellcode kannst ihn ja gleich korrigieren wen du willst.[ist aber noch nicht vertig)
Delphi-Quellcode:
unit Unit2;

interface

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

type

  Tnumer = record
           zahl : string;
           end;
  Toperation = record
               operant : string;
               end;
  Trechnung = record
              numer : array[0..100] of Tnumer;
              operation : array[0..100] of Toperation;
              end;

  TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Bevel1: TBevel;
    Edit2: TEdit;
    Label3: TLabel;
    procedure Edit2Change(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Button1Click(Sender: TObject);
    procedure Edit2Enter(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  chint : string;
  vertig : string;
  taste : string;
  pres_un : integer;
  sactiv : string;
  klammer1 : Char;
  i : integer;
  y : integer;
  ch: integer;
  x : integer;

  baum : array[0..100] of integer;
  activ : integer;
  first : boolean;
  input : string;
  save : string;
  vare : Array [0..100] of string;

  Form2: TForm2;


implementation


{$R *.dfm}
procedure TForm2.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if (key = VK_DELETE) then
 begin
 Edit1.Text:='clear';
 end;
 if (key = VK_SHIFT) or(key = VK_CONTROL) or (key = VK_DELETE) or (pos('key','q,w,e,r,t,z,u,i,o,p,ü,a,s,d,f,g,h,j,k,l,ö,ä,y,x,c,v,b,n,m')>0) or (key = VK_TAB) or (key = VK_CLEAR) or (key = VK_MENU) then
 begin
 pres_un:=pres_un+1;
 Edit1.Text:=save;
 end else
 begin
 if (first = false) then
  begin
   save:= Edit1.Text;
    first:=true;
   ch:= length(save);

   if (save[ch] = chr(40) ) then
   begin
    baum[y]:=x;
    ch:= length(baum);
    Label2.Caption:= IntToStr(baum[0]);
    first:=true;
    vare[activ]:=vare[activ]+'V'+IntToStr(baum[y]);
    activ:=1;
    for i:= 1 to ch do
      begin
       Label2.Caption:= Label2.Caption+IntToStr(baum[i]);
      end;
   end;
  input:=edit1.Text;
  ch:=length(input);
  klammer1:= chr(41);
  Label2.Caption:=klammer1+' = '+input[ch];
  if ( input[ch] = klammer1 ) then
  begin
   baum[y]:=0;
   baum[0]:=0;
   y:=0;
   baum[y]:=0;
   first:= false;
   application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
   Edit1.text:='';
  end;
  ch:=length(input);
  taste:=IntToStr(key);
  if (taste<>'56') and (taste<>'57') then begin
    first:=true;
    chint:=input[ch];
    if (chint = '+') or (input[ch] = '-') or (input[ch] = '*') then
    begin
    application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
    Edit1.text:='';
    end;
    if(chint = 'k') then
    begin
    Edit1.Text:='';
    first:= false;
    end;
    ch:=length(input);
    input:=edit1.Text;
    vare[activ]:=vare[activ]+input[ch];
    end;

  end else
   begin
   input:=edit1.Text;
   ch:= length(input);

   if (input[ch] = chr(40) ) then
   begin
   //Label2.Caption:='+'+input[ch];
   x:=x+1;
   y:=y+1;
   baum[y]:=x;
   ch:= length(baum);
   vare[activ]:=vare[activ]+'V'+IntToStr(baum[y]);
   activ:= x;
   Label2.Caption:= IntToStr(baum[0]);
    for i:=1 to ch do
     begin
      Label2.Caption:= Label2.Caption+IntToStr(baum[i]);
     end;
   end;
   ch:= length(input);
   if(input[ch] = chr(41) ) then
   begin
   y:= y-1;
   activ:= baum[y];
   if ( y<=0) then
   begin
   application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
   y:= y+1;
    ch:= length(input);
    ch:= ch-1;
    Edit1.text:=copy(input,1,ch);
   end else
   begin
   baum[y]:=0;
   ch:= length(baum);
   Label2.Caption:= IntToStr(baum[0]);
     for i:=1 to ch do
      begin
       Label2.Caption:= Label2.Caption+IntToStr(baum[i]);
      end;
      end;
   end;
    ch:= length(input);
    taste:=IntToStr(key);
  if (taste<>'56') and (taste<>'57') then begin
    first:=true;
    chint:=input[ch];
   // if (chint = '+') or (input[ch] = '-') or (input[ch] = '*') then
//    begin
//    application.MessageBox('Felerhafte eingabe!!','Error!!',MB_OK);
//    Edit1.text:='';
//    end;
    if(chint = 'k') then
    begin
    Edit1.Text:='';
    first:= false;
    end;
    ch:=length(input);
    input:=edit1.Text;
    vare[activ]:=vare[activ]+input[ch];
    end;
   end;
end;
vertig:=vare[0]+' '+vare[1]+' '+vare[2]+' '+vare[3]+' '+vare[4];
//Label2.Caption:=vertig+'; Ac='+IntToStr(activ);
Label2.Caption:=taste+' : '+'56 or 57'+' = '+BoolToStr((taste<>'56') and (taste<>'57'));
save:=Edit1.Text;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
x:=0;
y:=1;
Form2.KeyPreview:=true;
end;

procedure TForm2.Edit2Enter(Sender: TObject);
var
prüf : string;
begin
prüf:=Edit2.Text;
if (prüf = 'control') then
begin
Label2.Visible:=true;
end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
ip : integer;
rechnung : array[0..100] of Trechnung;
num : integer;
y : integer;
i : integer;
j : integer;
t : integer;
eingelesen : string;
begin
 
for i:=0 to 100 do
 begin
 j:=0;
  num:= length(vare[0]);
  while j<num do
  begin
  j:=j+1;
 // eingelesen:=vare[0];
//  Label3.Caption:=eingelesen+' : '+IntToStr(j);
  eingelesen:=copy(vare[0],1,j);
  //Label3.Caption:=eingelesen;
  ip:= length(eingelesen);
   if (eingelesen[ip] = '+') and (eingelesen[ip]='-') and (eingelesen[ip]='/') and (eingelesen[ip]='*') then
   begin
   eingelesen:=copy(vare[0],1,j-1);
   rechnung[0].numer[0].zahl:=eingelesen;
   j:=num+1;
   end;
   if (eingelesen[ip] = 'V') then
   begin
   j:=j+1;
   end;
  end;
 end;
Label3.Caption:=eingelesen+' : '+rechnung[0].numer[0].zahl;
end;

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Ord(Key) = 17 then
  begin
    self.Height:=326;
    Bevel1.Visible:=true;
    Edit2.Visible:=true;
    Form2.ActiveControl:=Edit2;
  end;
end;

procedure TForm2.Edit2Change(Sender: TObject);
var
prüf : string;
begin
prüf:=Edit2.Text;
if (prüf = 'control') then
begin
Label2.Visible:=true;
Label3.Visible:=true;
end;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 Uhr.
Seite 3 von 3     123   

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