![]() |
MessgaeBox und ShowMessage ist riesig
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen
ich habe von Konrad Elektronic ein usb Experimental board von velleman und habe da eine Oberfläche programmiert mit der man eine Schrittkette ablaufen lassen kann. Dabei werden Eingänge oder Timeouts in einem eigenen Threat gepollt und dann über eine Action list als Ergebnis in der Application mit TAction.Execute ein Event ausgelöst. Das hat soweit prima geklappt. Nun wollte ich auch noch ein Programmaufruf zur Auswertung einbinden. die Klasse sieht so aus
Delphi-Quellcode:
die Schrittkette ist ein Inifile und im Anhang
unit Chain;
interface uses Classes, iniFiles, sysUtils; type TChainStep = class(TObject) actString: String; outputToSet : byte; msToWait: integer; inputToWait : smallInt; nextStepDann : shortInt; nextStepSonst: shortInt; next : shortInt; callRoutine : string; end; type TChain = class(tObject) count : word; curStep : smallInt; curIStat : byte; step : Array of TChainStep; constructor create; end; implementation constructor TChain.create; var ini : TIniFile; stepKey : string; cur : shortInt; stepText : string; lastReached:boolean; dir : string; begin DecimalSeparator:='.'; curStep := -1; cur:=1; dir := extractFileDir(paramStr(0)); ini := TIniFile.Create(IncludeTrailingPathDelimiter(dir)+'chain.ini'); try lastReached:=false; while not lastReached do begin stepKey := Format('%s%d',['Step',cur]); stepText := ini.ReadString(stepKey,'actString','Not Defined'); if compareStr(stepText,'Not Defined')=0 then lastReached:= true else begin setLength(step, cur); step[cur-1] := TChainStep.Create; step[cur-1].actString := stepText; step[cur-1].outputToSet := ini.ReadInteger(stepKey,'outPut',0); // setze output 1 step[cur-1].msToWait := ini.ReadInteger(stepKey,'msToWait',0); // warte unendlich step[cur-1].inputToWait := ini.ReadInteger(stepKey,'inputToWait',0); // auf input 2 step[cur-1].nextStepDann:= ini.ReadInteger(stepKey,'nextStepDann',1)-1;// ergebnis gibts im nächsten schritt step[cur-1].nextStepSonst :=ini.ReadInteger(stepKey,'nextStepSonst',0)-1;// step[cur-1].callRoutine := ini.ReadString(stepKey,'callRoutine','');; inc(cur); end; end;//while finally ini.Free; end; end; end. bei Step 5 ist eine Callroutine eingetragen die in der Application
Delphi-Quellcode:
deklariert ist.
...
AskFor: TAction; ... Wenn jetzt der Schritt mit der callRoutine kommt wird sie so aufgerufen
Delphi-Quellcode:
wenn jetzt in askFor execute nur ShowMessage aufgerufen wird füllt die Messgaebox den kompletten Bildschirm und alles darüber hinaus! Scrollen bringt nicht das Fenster ist zu groß!if chain.step[actChain.Tag].callRoutine<>'' then begin foundComponent := FindComponent(chain.step[actChain.Tag].callRoutine); Memo1.Lines.Append(foundComponent.Name); Memo1.Lines.Append(foundComponent.ClassName); TAction(foundComponent).Execute; if TAction(foundComponent).Tag = mrYes then actChain.Tag := chain.step[actChain.Tag].nextStepDann else actChain.Tag := chain.step[actChain.Tag].nextStepSonst; Memo1.Lines.Append(chain.step[actChain.Tag].actString); end; Bei MessgaeBox oder MessageDlg ist es nicht so schlimm aber das Fenster ist unendlich breit und die Buttons sind irgendwo im Nirwana. siehe screenshot Kann damit jemand was anfangen?? Hat jemand auch so ein board? (dann kann ich ihm/ihr das ganze projekt ja mal zuschicken) hoffe auf hilfe Gruß stefan |
Re: MessgaeBox und ShowMessage ist riesig
Kontrollier mal ob lauter Leerzeichen im anzuzeigenden Text sind. Evtl. mal mit Trim entfernen lassen.
|
Re: MessgaeBox und ShowMessage ist riesig
hallo bernhard
Das schlimme an der Sache ist, dass dieses überbreite Fenster nur beim ersten Aufruf immer und sonst nur gelegentlich kommt. d.h. ich bin mir sicher, dass es da keine leerzeichen gibt. Auserdem ist es ein 'händisch' eingetragener Text! Trotzdem Danke Gruß Stefan |
Re: MessgaeBox und ShowMessage ist riesig
Ich hab den Fehler gefunden!!
Es ist das gleiche wie bei meiner Frage: Timage friert ein. Die TAction ist nicht Threadsicher!! Unschön ist natürlich diese Auswirkung da kommt man nur schwer drauf! Danke Gruß Stefan |
Re: MessgaeBox und ShowMessage ist riesig
Die VCL ist generell nicht threadsicher und das sollte man eigentlich wissen.
|
Re: MessgaeBox und ShowMessage ist riesig
Ja sollte man aber,
dass ein nicht beachten solch fatale und/oder sporadische Auswirkungen hat war schon der Hammer. Und es ist schwer solch einem Fehler auf die Spur zu kommen wenn er sich mal eingeschlichen hat. Hauptsache ich habe was draus gelernt. Gruß von Stefan |
Re: MessgaeBox und ShowMessage ist riesig
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 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