AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetDC, Canvas, bsclear

Ein Thema von simjoh · begonnen am 7. Jul 2007 · letzter Beitrag vom 13. Jul 2007
Antwort Antwort
Seite 2 von 2     12   
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: GetDC, Canvas, bsclear

  Alt 13. Jul 2007, 00:35
Hi

geht leider immer noch nicht. Immer flackert der ganze Bildschirm. Hab keine Idee mehr, wer hat noch eine??

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: GetDC, Canvas, bsclear

  Alt 13. Jul 2007, 00:38
Hi,

wie ermittelst du denn das Handle des fremden Fensters?

Edit: Der Code aus Beitrag #8 sollte nämlich ohne flackern funktionieren.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: GetDC, Canvas, bsclear

  Alt 13. Jul 2007, 09:45
Hi, sorry, bin gestern gleich offline gegangen, hätt ich gewusst, dass ich noch ne Antwort bekomme, wäre ich noch wach geblieben. Das Handle ermittle ich im Prinzip so:

Delphi-Quellcode:
//fill in the listview with all the information
procedure TMainForm.WriteText(Wnd: HWnd);
var pcWinText : PChar;
    NewItem : TListItem;
    aProcessEntry32 : TProcessEntry32;
    aSnapshotHandle : THandle;
    WinVersion : DWord;
    ProcessID : longint;
    ContinueLoop : boolean;
begin
  NewItem:=ListView.Items.Add;
  {Is Window Visible?}
  NewItem.Checked:=IsWindowVisible(wnd);
  {WindowCaption}
  pcWinText:= StrAlloc(102);
  GetWindowText(Wnd, pcWinText, 100);
  NewItem.Caption:=StrPas(pcWinText);
  StrDispose(pcWinText);
  {WindowClassName}
  pcWinText:= StrAlloc(102);
  GetClassName(Wnd, pcWinText, 100);
  NewItem.SubItems.Add(StrPas(pcWinText));
  StrDispose(pcWinText);
  {WindowHandle}
  NewItem.SubItems.Add(IntToHex(wnd, 8));
  {WindowThreadProcessID}
  GetWindowThreadProcessID(wnd,@ProcessID);
  NewItem.SubItems.Add(IntToHex(ProcessID, 8));
  {WindowsVersion}
  WinVersion:=GetProcessVersion(ProcessID);
  NewItem.SubItems.Add(IntToStr(WinVersion shr 16)+'.'+IntToStr(WinVersion mod $1000));
  {CommandLine}
  {According to Christian Kästner:}
  aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  aProcessEntry32.dwSize := Sizeof(aProcessEntry32);
  ContinueLoop := Process32First(aSnapshotHandle, aProcessEntry32);
  while integer(ContinueLoop) <> 0 do begin
    if aProcessEntry32.th32ProcessID = ProcessID then
      NewItem.SubItems.Add(ExtractFileName(aProcessEntry32.szExeFile));
    ContinueLoop := Process32Next(aSnapshotHandle,aProcessEntry32);
  end;
  CloseHandle(aSnapshotHandle);
  {end of Chrstian's stuff}
end;
Gruß
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: GetDC, Canvas, bsclear

  Alt 13. Jul 2007, 11:52
Fuuuuuuuuuuuunzt!!

Ohne wackeln und zappeln des fremden Fensters. Geht tatsächlich mit
Delphi-Quellcode:
var
  Rect: TRect;
begin
  GetWindowRect(FremdesFenster.Handle, Rect);
  Rect.Bottom:= Rect.Bottom- Rect.Top;
  Rect.Right:= Rect.Right- Rect.Left;
  Rect.Top:= 0;
  Rect.Left:= 0;
  RedrawWindow(FremdesFenster.Handle, @Rect, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
Man muss bei GetWindowRect auch das Handle des fremden Fensters angeben!!

Danke bitsetter!! Liebe Grüße
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: GetDC, Canvas, bsclear

  Alt 13. Jul 2007, 12:53
Hi,

in der Form wie du den Code jetzt hast, könntest du die Variable Rect gleich ganz weglassen und stattdessen nil nehmen. Die brauchst du eigentlich nur, wenn du innerhalb des fremden Fensters nur einen bestimmten Bereich neuzeichnen möchtest. Zum Beispiel wenn du auf einem fremden Fenster einen Text zeichnest und du nur den Bereich auf dem sich der Text befindet neuzeichnen möchtest. Dazu müsstest du Rect allerdings dementsprechend neu berechnen, da jetzt das ganze Fenster neugezeichnet wird.
RDW_FRAME kann man wohl auch noch weglassen wenn man die Funktion mit der Variable Rect aufruft.
Edit: das hätte auch gereicht:
Delphi-Quellcode:
var
  Rect: TRect;
begin
  Windows.GetClientRect(FremdesFenster, Rect);
  ...
  RedrawWindow(FremdesFenster, @Rect, 0, RDW_ERASE or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: GetDC, Canvas, bsclear

  Alt 13. Jul 2007, 18:23
Äh, nochmal ne Frage.

Ich zeichne mit
Delphi-Quellcode:
C.Handle := GetDC(FremdesFenster.Handle);
C.TextRect(Rect,PointX,PointY,Str);
den Text Str im Rechteck Rect in ein fremdes Fenster. C ist ein TCanvas. Genau diesen Text im will ich nun wieder löschen. Wie muss ich das den anstellen? Wenn ich das Rect an deine Proc übergebe, wird der Text nicht überschreiben, is wahrscheinlich an der falschen Stelle, das Rechteck.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: GetDC, Canvas, bsclear

  Alt 13. Jul 2007, 21:11
Komisch bei mir geht es:

Delphi-Quellcode:
  C.Handle := GetDC(FremdesFenster);
  C.TextRect(Rect,PointX,PointY,Str);
  sleep(2000);
  RedrawWindow(FremdesFenster, @Rect, 0, RDW_ERASE or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
Nach 2 sec wurde der Text wieder gelöscht.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:27 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