![]() |
Warum funktioniert ein Code einmal und dann wieder nicht?
Hi,
ich habe in meinem neuen Delphi Programm folgende Zeile verwendet:
Delphi-Quellcode:
Aber jetzt wollte ich sie wieder verwende, und es geht nicht mehr. :x
taste:=IntToStr(key);
Delphi-Quellcode:
Wieso, und was muss ich ändern?
procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
var pres : string; begin pres:= IntToStr(key); if (pres = '17') then begin self.Height:=326; Bevel1.Visible:=true; Edit2.Visible:=true; end; end; Fehler: Inkompatible Typen |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Char ist kein Integer
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Warum geht es dann beim ersten Mahl?
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Versuch mal das:
Delphi-Quellcode:
procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
begin if Ord(Key) = 17 then begin self.Height:=326; Bevel1.Visible:=true; Edit2.Visible:=true; end; end; |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Weil da Key ein Integer/Byte/Word... war?
Gruß K-H |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Viel eleganter ist es, wenn du die Funktion
![]()
Delphi-Quellcode:
[edit: [OT]Oh man, warum kommt heute keine Warnung, wenn neue Beitrage gepostet worden sind, bevor man den eigenen Beitrag abschickt?[/OT]]if ord(key)=17 then [do something] |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
Ich vermute mal, du hast diese Codezeile im Event OnKeyDown oder OnKeyUp benutzt, und da ist Key vom Typ word! cu Oliver @himitsu: erster :P |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Delphi-Quellcode:
if Key = #17 then
Zitat:
Wenn ja, dann schau dir mal die Definitionen genau an. |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Es gibt OnKeyPress und OnKeyDown. Beim einen wird das Zeichen als Parameter übergeben, beim anderen wird der Tastencode als Parameter übergeben!
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
danke geht jetzt, aber ich hätte da noch eine frage.
also wie man im Quellcod sieht,
Delphi-Quellcode:
wird immer wen man 17 also Strg. drückt ein Menü sichtbar, aber sobald ich das Programm starte ist der Fokus auf einem Edit, und ich bekomme ihn nicht herunter. demzufolge geht das ganze nicht , und ich weiß nicht wich dieses Problem lösen kann.
procedure TForm2.FormKeyPress(Sender: TObject; var Key: Char);
var pres : string; begin if Ord(Key) = 17 then begin self.Height:=326; Bevel1.Visible:=true; Edit2.Visible:=true; end; end; wie bekomme ich das hin? |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Dann solltest du dem Formular den Fokus zurückgeben (Form1.SetFocus oder sowas)
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Setze "Form.KeyPreview" auf true. So bekommt das Formular die Tastendrücke "zu sehen" auch wenn ein Editfeld gerade den Focus hat!
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Hast Du mal versucht, ActiveControl auf nil zu setzen?
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
alle befehle helfen nur halbwegs, da
Delphi-Quellcode:
und
ActiveControl
Delphi-Quellcode:
nicht richtig funktionieren(Form und edit haben den Fokus beide) und
Form.KeyPreview
Delphi-Quellcode:
funktioniert überhaupt nicht.
setFocus
Das blöde ist sobald das edit mitkriegt, das Strg. gedrückt wurde löst es einen Fehler aus.(liegt an meinem Programm, is aber nicht änderbar) |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
Zitat:
BTW: "Funktioniert nicht" ist eine äußerst detaillierte Fehlerbeschreibung :evil: |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
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:
den Fokus zuweise(also beim Start) dann heißt es immer "einem Unsichtbaren oder inaktiven Fenster kann kein Fokus zugewiesen werden", habe aber jetzt
Form.KeyPreview
Delphi-Quellcode:
verwendet
Form.KeyPreview
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Wo hast du denn das KeyPreview stehen? Lass mich mal raten: Ich tippe auf FormCreate ;-)
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
jup!! wieso den :?:
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Weil dort dein Formular evtl noch gar nicht angezeigt wird. Versuchs mal mit OnShow ;)
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
hab ich auch schon!
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
"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:
Alternativ dazu kannst du die Eigenschft natürlich im OI zuweisen.
KeyPreview := true; // entspricht DasFormular.KeyPreview := true;
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: ![]() |
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. |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Entschuldigung sollte heißen:
Zitat:
Zitat:
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
Wie äussert es sich wenn ein Programm sich "überarbeitet"?? :gruebel: |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
|
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
|
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! |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
Delphi-Quellcode:
SCNR...
ShowMessage('Ach lass mich in Ruhe. Ich hatte heute einen schweren Tag');
Application.Terminate; |
Re: Warum funktioniert ein Code einmal und dann wieder nicht
Zitat:
Zeig doch mal den Quellcode! Da stimmt doch hinten und vorne was nicht. Zitat:
Gruß K-H |
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 01:33 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