AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit dem Valuelisteditor

Ein Thema von Alexander · begonnen am 3. Jul 2003 · letzter Beitrag vom 30. Okt 2004
Antwort Antwort
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#1

Probleme mit dem Valuelisteditor

  Alt 3. Jul 2003, 18:24
Hi,
ich habe ein paar Probleme mit dem ValueListeditor.
Ich hoffe ihr könnt mir helfen.
Also mein Problem:
Mein Programm kann verschiedene (fremde) Fenster aus der Taskleiste entfernen und trägt sie in ein PopUp-Menü ein. Das klappt auch so weit.
Dann hat es noch einen Fenster-Manager. Dort kann man gleich Fenster aus einem ValueListeditor heraus verschwinden bzw. anzeigen lassen.
Doch habe ich das Problem, dass manchmal eine Acces Violation kommt.
Sie kommt manchmal, wenn ich ein Fenster versteckt habe, dann Fenster geschlossen und wieder angezeigt wird. Oder auch erst wenn man dann das Programm wieder anzeigen lässt und dann das Fenster schließt und wieder öffnet.
Die kann ich mir einfach nicht erklären. Vielleicht könnt ihr mir ja helfen. Da ich nicht genau weiß, wo dran es genau liegt, poste ich mal die gesamte Unit und hänge die exe auch mal dran.
Der Code (unit):
Delphi-Quellcode:
unit windowmanager;

interface

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

type
  Tmanager = class(TForm)
    ValueListEditor1: TValueListEditor;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  manager: Tmanager;

implementation

uses Unit1;

{$R *.dfm}

function GetText(Wnd: HWND): string;
//holt Fenster-Titel
var
  textlength: Integer;
  Text: PChar;
begin
  textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
  if textlength = 0 then Result := ''
  else
  begin
    GetMem(Text, textlength + 1);
    SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text));
    Result := Text;
    FreeMem(Text);
  end;
end;

function EnumWindowsProc(Wnd: HWND; lParam: lParam): BOOL; stdcall;
//listet sichtbare Fenster, die in der Taskleiste sind, auf
begin
  Result := True;
  if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
    ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
    (GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
    (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) and (IntToStr(Wnd) <> '' )then
     begin
//hier hakt es dann, weiß aber nicht wo genau der Fehler ist.
       manager.ValueListEditor1.InsertRow(IntToStr(Wnd), GetText(Wnd), true);
     end;
end;

procedure Tmanager.FormShow(Sender: TObject);
var
  Param: Longint;
  i : Integer;
begin
 ValueListEditor1.Strings.Clear;
  EnumWindows(@EnumWindowsProc, Param);
  ShowMessage(IntToStr(ValueListEditor1.RowCount));
{Fenster aus array hinzufügen}
  for i:=0 to High(fenster) do
   begin
    manager.ValueListEditor1.InsertRow(fenster[i, 0]+'*', GetText(StrToInt(fenster[i, 0])), true);
   end;
end;

procedure Tmanager.Button1Click(Sender: TObject);
//Fenster-verstecken Button
var
 pos1 : Integer;
 title : String;
begin
 pos1 := POS('*', ValueListEditor1.Keys[ValueListEditor1.Row]);
 if (pos1 <=0) then
  begin
   //vestecken...
     SetLength(fenster,High(fenster)+2);
     SetLength(fenster[High(fenster)],2);

     title := GetText(StrToInt(ValueListEditor1.Keys[ValueListEditor1.Row]));
     if (Length(title) >= 30) then
      title := Copy(title, 0, 28)+'...';

     fenster[High(fenster),1] := title;
     fenster[High(fenster),0] := ValueListEditor1.Keys[ValueListEditor1.Row];

     ShowWindow(StrToInt(fenster[High(fenster), 0]), SW_HIDE);

    {aktualiesieren...}
   ValueListEditor1.Keys[ValueListEditor1.Row] := ValueListEditor1.Keys[ValueListEditor1.Row]+'*';
  end
  else
   MessageDlg('Fenster schon verborgen.', mtWarning, [mbok], 0);
end;

procedure Tmanager.Button2Click(Sender: TObject);
//Fenster-Anzeigen Button
var
 pos1, int, i : Integer;
 title : String;
begin
 pos1 := POS('*', ValueListEditor1.Keys[ValueListEditor1.Row]);
 if (pos1 >=0) then
  begin
    title := ValueListEditor1.Values[ValueListEditor1.Keys[ValueListEditor1.Row]];
   if (Length(title) >= 30) then
    title := Copy(title, 0, 28)+'...';

  {nach String im Array suchen:}
   for i:=0 to High(fenster) do
    begin
     if (fenster[i, 1] = title) then
      int := i;
    end;
    ShowWindow(StrToInt(fenster[int, 0]), SW_SHOW);
    Form1.delete_row(int);

   {Manager-Fenster in den Vordergrund bringen}
    SetForegroundWindow(Handle);

   {aktualiesieren...}
   pos1 := POS('*', ValueListEditor1.Keys[ValueListEditor1.Row]);
   if (pos1 >=0) then
    begin
     ValueListEditor1.Keys[ValueListEditor1.Row] := COPY(ValueListEditor1.Keys[ValueListEditor1.Row], 1, pos1-1);
    end;
  end
  else
   MessageDlg('Fenster wurde nicht versteckt.', mtWarning, [mbok], 0);
end;

end.
Ich hoffe ihr könnt einem Ratlosen helfen!!! Vielen Dank schon mal.
Alexander
PS: An der Exe ist graphisch noch nichts gemacht worden. Sie hat in der TNA auch ncoh kein Icon!!
Angehängte Dateien
Dateityp: zip prg.zip (254,1 KB, 20x aufgerufen)
Alexander
  Mit Zitat antworten Zitat
proitsystems

Registriert seit: 4. Nov 2003
Ort: Augsburg
29 Beiträge
 
#2

Re: Probleme mit dem Valuelisteditor

  Alt 27. Okt 2004, 23:10
Hallo!

Ein ähnliches Problem habe ich auch. Es hängt mit dem TValueListEditor zusammen. Wenn man Einträge erstellt und diese mit "ValueListEditor.Strings.Clear" löscht, bekommt man eine Access Violation.

Ich weiss nicht voran es hängt, ich schätze es ist ein Bug im TValueListEditor.

Werde jetzt weiter mal im Netz recherchieren.


Liebe Grüsse,

Marc Geldon
(PRO IT SYSTEMS)
  Mit Zitat antworten Zitat
proitsystems

Registriert seit: 4. Nov 2003
Ort: Augsburg
29 Beiträge
 
#3

Re: Probleme mit dem Valuelisteditor

  Alt 27. Okt 2004, 23:46
Habe die Lösung des Problems gefunden.

Spiel dir das Delphi Update 7.1 ein (falls du Delphi 7 hast). Damit wird der Bug behoben.


Gruss,

Marc Geldon
(PRO IT SYSTEMS)
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#4

Re: Probleme mit dem Valuelisteditor

  Alt 29. Okt 2004, 23:51
Das Thema ist schon mehr als ein Jahr alt, ich glaub ich bin damals auf ne Listview oder so umgestiegen oder habe ne Lösung gefunden . Das weiß ich gar nicht mehr so genau .

PS: Jupp, habe D7 (& D8 )
PPS: Aber erstmal herzlich willkommen und super das du die Suche benutzt hast
Alexander
  Mit Zitat antworten Zitat
proitsystems

Registriert seit: 4. Nov 2003
Ort: Augsburg
29 Beiträge
 
#5

Re: Probleme mit dem Valuelisteditor

  Alt 30. Okt 2004, 02:55
Ooopppss.... ich hätte mal aufs Datum schauen sollen

Danke für den Willkommensgruss. Bis in Kürze. Man liest sich im Forum.


mfG,

Marc
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 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